😄
[Github]: Github Actionsで後続のJobにOutputの値を渡す
[Github]: Github Actionsで後続のJobにOutputの値を渡す
Github Actionsのワークフロー内に二つの独立したJob1, Job2間でGITHUB_OUTPUTの参照する方法に苦戦したのでメモ
前提
- 二つの独立したJob1, Job2のワークフローがあり、Job1で処理で取得した文字列を設定する
- Job2ではそのJob1がGITHUB_OUTPUTに保存した文字列を取得し、処理に使用する
発生したこと
- Job2で参照したJob1の文字列に何もない状態になる。
具体的なコード
コードは書きのようにTerraformでリソースを構築し、その構築したリソース(EC2)のパブリックIPアドレスとパブリックDNS名を変数として保存し、後続のansibleワークフローで使用するというもの
得た変数はansibleワークフローでinventoryファイルを作成するのに使用される
deploy:
############ 省略 ############
steps:
- name: Checkout
uses: actions/checkout@v4
############ 省略 ############
- name: Terraform apply
id: apply
run: terraform apply -auto-approve
- name: Get Terraform Outputs
id: output
run: |
echo "public_dns=$(terraform output -raw ec2_public_dns)" >> $GITHUB_OUTPUT
echo "public_ip=$(terraform output -raw ec2_public_ip)" >> $GITHUB_OUTPUT
ansible:
############ 省略 ############
steps:
- name: Checkout
uses: actions/checkout@v4
############ 省略 ############
- name: インベントリファイルの作成
run: |
echo "[amazon]" > inventory
echo "amazon ansible_host=${{ public_ip }} ansible_python_interpreter=/usr/bin/python3.9" >> inventory
echo "[amazon:vars]" >> inventory
echo "ansible_ssh_common_args='-o StrictHostKeyChecking=no'" >> inventory
############ 省略 ############
原因
調べたらドキュメントに書いてあったが、ジョブ1でoutputs構文を使用すると後続のジョブに渡すことができる。
outputsセクションをstepsと同じ階層に定義し、steps.ステップ名.outputs.変数名とすることで他ジョブに渡すことができる。
また使用するジョブで使用する場合、needs.ジョブ名.outputs.変数名と指定することで変数が取得できる。
deploy:
############ 省略 ############
outputs:
ec2_dns: ${{ steps.output.outputs.public_dns }}
ec2_ip: ${{ steps.output.outputs.public_ip }}
ansible:
############ 省略 ############
steps:
############ 省略 ############
- name: インベントリファイルの作成
run: |
echo "[amazon]" > inventory
echo "amazon ansible_host=${{ needs.deploy.outputs.ec2_ip }} ansible_python_interpreter=/usr/bin/python3.9" >> inventory
echo "[amazon:vars]" >> inventory
echo "ansible_ssh_common_args='-o StrictHostKeyChecking=no'" >> inventory
最後に
間違っていることがあれば、コメントに書いていただけると幸いです。
よろしくお願いいたします。
Discussion