github actions で外部ファイルの変数を展開する
概要
業務の中で、github actions のワークフローから外部ファイルを読み込み、外部ファイル中の変数を展開して、利用したいという要望が生まれた。
github actions のワークフロー(テンプレートファイル内)ではワークフロー構文を用いて、ワークフロー中で定義した変数や各ステップの変数などを展開して利用することが可能である。
一方で、読み込んだファイルに対しての操作が定義されいてないので、sed コマンドを用いて実装した。
sed コマンド
man コマンドで sed を調べると、以下のように定義されている。
The sed utility reads the specified files, or the standard input if no files are specified, modifying the input as specified by a list of commands.
要するに、指定したファイルや、標準出力に対して修正を行えるコマンドである。
sed コマンドの具体的な使用方法は下記の記事が参考になります。
json ファイル内に独自に定義した変数を sed コマンドで展開する
上記で説明した sed コマンドを使って、json ファイル内に定義した独自の変数を展開する。
まずは、json ファイルを用意する。
{
"hello": "${hello}"
}
-e オプションを用いて、正規表現を使った置換を行う。
❯ sed -e 's/${hello}/HelloWorld/g' hello.json
{
"hello": "HelloWorld"
}
${hello}
が HelloWorld
に変換されている。
今回は、正規表現を用いて返還したため、変数と判定しやすいように${ 変数名 }
という形を取ったが< 変数名 >
など、変数と判定できればなんでも良い。また、-e オプションの代わりに -i オプションをつけることでファイルを直接変更することもできる。
github actions で json ファイルを読み込み変数を sed コマンドで展開する
いよいよここから本題です。と言っても、上記で説明した内容を github actions のワークフローに適用するだけである。
先ほどと同様に、json ファイルを用意する。
{
"hello": "${hello}"
}
次にワークフローを定義する。
name: hello
on:
push:
branches:
- main
env:
HELLO_WORLD: HelloWorld
jobs:
hello:
name: HelloWorld sample
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# json ファイル出力
- name: before modify json file
run: cat hello.json
# sed コマンドで json ファイルの変数展開
- name: modify json file
run: sed -i 's/${hello}/${{ env.HELLO_WORLD }}/g' hello.json
# json ファイル出力
- name: after modify json file
run: cat hello.json
以下のようなディレクトリ構造になっていればOK。
❯ tree -a -I .git
.
├── .github
│ └── workflows
│ └── hello.yml
└── hello.json
この状態で main branch にプッシュすると github action が走る。以下が実行結果である。
ワークフロー中で外部ファイルを読み込み、外部ファイル中の変数を展開することができた。
Author And Source
この問題について(github actions で外部ファイルの変数を展開する), 我々は、より多くの情報をここで見つけました https://qiita.com/masachoco/items/c32804819c6219fcb710著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .