■ はじめに
小ネタ。
https://dk521123.hatenablog.com/entry/2024/02/18/232926
で設定値の切り替えについて行った。 ただ、設定を固定値で書くと、もし、その設定値が変わった場合 逐一書き直さないとならない。 更に、この設定値が別のファイルにも書かれていた場合、 手間だけでなく、メンテナンス性含めてしんどいことになるので 出来る限り一ヶ所でまとめて管理したい。 そこで、 Github Actionsで使える設定ファイルのフォーマットについて 考えてみた
目次
【1】Github Actionsで使える設定ファイルを考える 1)補足:yq コマンド 2)実験コード 【2】使用上の注意 1)jq / JSONの場合 【3】サンプル 例1:cat コマンド を利用する場合 例2:jq コマンド を利用する場合
【1】Github Actionsで使える設定ファイルを考える
* Github Actions の場合、Bash などのコマンドベースで行うことが多い。 コマンドベースで行う場合、jq などの専用コマンドで扱えないとしんどい。 問題は、Github Actionsの実行環境でそのコマンドが使えるかが焦点になる * そこで、以下の観点で考えてみる必要があると思う ~~~~~~~ [1] 実行環境(GitHub hosted runners or Self-hosted runner) [2] その他現場の要件(実行環境に自由にソフトウェアをインストール可能か?) ~~~~~~~ * 値が1つしかない場合(例えば、versionなど)は、 catコマンドなどでシンプルにするのもありかと。(サンプル参照)
メモ
* 本当は、YAMLを使いたいが、現場がSelf-hosted runnerで yq が入っていない * jq コマンドは比較的にどの環境でもデフォルトで入っているのでJSONであれば問題ない
1)補足:yq コマンド
jq はJSONを扱うコマンド(以下の関連記事を参照のこと)だが、そのYAML版。 (XMLなら、xqがあるみたい。使わないだろーけど)
jq コマンド ~ JSON を扱う ~
https://dk521123.hatenablog.com/entry/2020/02/01/000000
2)実験コード
* GitHub hosted runners(ubuntu-latest)の場合、jq/yq コマンドが使える模様
.github/workflows/demo_workflow.yml
name: DemoWorkflow on: workflow_dispatch: jobs: job1: runs-on: ubuntu-latest steps: - run: | jq --version yq --version dasel --version
出力結果
# jq --version jq-1.6 # yq --version yq (https://github.com/mikefarah/yq/) version v4.44.1 # dasel --version /home/runner/work/_temp/xxxxx-xxxxx-xxxxx-xxxxx-xxxxx.sh: line 3: dasel: command not found Error: Process completed with exit code 127.
【2】使用上の注意
1)jq / JSONの場合
* 文字列の場合、jq -r しないと、区切り文字付きの値が取得することになる => -rオプションなどの詳細は、以下の関連記事を参照のこと
jq コマンド ~ JSON を扱う ~
https://dk521123.hatenablog.com/entry/2020/02/01/000000
【3】サンプル
例1:cat コマンド を利用する場合
.github/VERSION
1.2.3
.github/workflows/workflow1.yml
name: DemoWorkflow on: workflow_dispatch: jobs: demo_job: runs-on: ubuntu-latest steps: # まずは、Githubリポジトリに管理されているファイルをダウンロード - uses: actions/checkout@v4 - run: | version_value=$(cat .github/VERSION) echo "version_value: $version_value"
出力結果
version_value: 1.2.3
例2:jq コマンド を利用する場合
* jq コマンドについては、以下の関連記事を参照のこと
jq コマンド ~ JSON を扱う ~
https://dk521123.hatenablog.com/entry/2020/02/01/000000
{ "dev": { "aws_account_id": 111111111111111, "s3_bucket_name": "your-s3-for-dev" }, "stage": { "aws_account_id": 222222222222222, "s3_bucket_name": "your-s3-for-stage" }, "prod": { "aws_account_id": 999999999999999, "s3_bucket_name": "your-s3-for-prod" } }
.github/workflows/workflow2.yml
name: DemoWorkflow2 on: workflow_dispatch: inputs: environment: required: true type: choice default: dev options: - dev - stage - prod jobs: demo_job: runs-on: ubuntu-latest steps: # まずは、Githubリポジトリに管理されているファイルをダウンロード - uses: actions/checkout@v4 - name: settings env: ENVIRONMENT: ${{ inputs.environment }} run: | env=${{ env.ENVIRONMENT }} # [1] aws_account_id aws_account_id=$(cat .github/settings.json | jq ".${env}.aws_account_id") echo "aws_account_id: $aws_account_id" # [2] s3_bucket_name s3_bucket_name=$(cat .github/settings.json | jq -r ".${env}.s3_bucket_name") echo "s3_bucket_name: $s3_bucket_name"
出力例:inputs.environment = prod の場合
aws_account_id: 999999999999999 s3_bucket_name: your-s3-for-prod
関連記事
Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/12/22/195715
Github Actions ~ 設定値を切り替えることを考える ~
https://dk521123.hatenablog.com/entry/2024/02/18/232926
jq コマンド ~ JSON を扱う ~
https://dk521123.hatenablog.com/entry/2020/02/01/000000