はじめに
エキサイト株式会社 バックエンドエンジニアの山縣です。
GitHub Actionsを使用して、 ワークフローを実行するときに、YAMLファイルを動的に書き変える必要がありました。 本記事では、デプロイ周りを整備するときに得た知見の1つとして、GitHub ActionsでJSON / XML / YAMLファイルを動的に書き換える方法について紹介します。
やること
サンプルとして、次のJSONファイル(sample.json)を用意しました。
{ "value": "", "items": [ { "name": "", "price": 100 }, { "name": "", "price": 200 } ] }
GitHub Actionsを実行時に、value
, items[0].name
, items[1].name
を、次のとおりに書き換えます。
{ "value": 123, "items": [ { "name": "apple", "price": 100 }, { "name": "orange", "price": 200 } ] }
ワークフロー
GitHub ActionsでJSONファイルを動的に書き換えるために、microsoft/variable-substitution@v1
を使用します。
これを使用すると、JSON / XML / YAMLファイルにある値を、動的に書き換えることができるようになります。
使用方法
サンプルとして、「GitHubにプッシュ時に、JSONファイルの値を書き換えて、それを表示する」ワークフロー(sample.yml)を用意しました。
これを、.github/workflows
ディレクトリ配下に置いてプッシュすることで、ワークフローを実行することができます。
on: [push] name: run jobs: run: runs-on: ubuntu-latest env: ITEM_NAME_1: orange steps: - uses: actions/checkout@v2 - uses: microsoft/variable-substitution@v1 with: files: sample.json env: value: 123 items.0.name: apple items.1.name: ${{ env.ITEM_NAME_1 }} - run: cat sample.json
配列の要素にアクセスする
ドキュメントには、配列の要素にアクセスする方法について書かれていません。 しかし、Issueを見てみると、インデックスを指定すると配列の要素にアクセスできることがわかります。
配列の要素にアクセスするときは、items.0.name
のように記述する必要があります。
実行結果
実際に、上記のワークフローを実行します。
確かに、value
, items[0].name
, items[1].name
が書き換わっていることが確認できます。
おわりに
microsoft/variable-substitution@v1
を使用することで、YAMLファイルを動的に書き換えることができました。
これにより、次のようなことができるようになります。
この記事がお役に立てれば幸いです。
採用アナウンス
エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しています。 また、長期インターンも歓迎しています。
カジュアル面談からもOKです。少しでもご興味がございましたら、お気軽にご連絡頂ければ幸いです。
▼ 募集職種一覧 ▼ www.wantedly.com