Closed2
GitHub Actions でハマったところ
環境変数
GitHub Actions で変数設定やファイル操作を行ったところ、意図した結果になりませんでした。
実際に適用した workflow は以下になります。
env:
PYTHON_VERSION: 3.9
SECRET_KEY: ${{ secrets.ID_RSA_ORACLE }}
ANSIBLE_SSH_PRIVATE_KEY_FILE: ~/.ssh/id_rsa_oracle
- name: Set up SSH key
run: |
echo "$SECRET_KEY" > "$ANSIBLE_SSH_PRIVATE_KEY_FILE"
chmod 400 "$ANSIBLE_SSH_PRIVATE_KEY_FILE"
環境変数については以下のようになっています。
-
SECRET_KEY
: 秘密鍵の中身 -
ANSIBLE_SSH_PRIVATE_KEY_FILE
: 秘密鍵のファイル名(パス)
実際にworkflowが実行されると、秘密鍵が見つからないエラーになりました。
echo "$SECRET_KEY"> "$ANSIBLE_SSH_PRIVATE_KEY_FILE"
chmod 400 "$ANSIBLE_SSH_PRIVATE_KEY_FILE"
shell: /usr/bin/bash -e {0}
env:
PYTHON_VERSION: 3.9
SECRET_KEY: ***
ANSIBLE_SSH_PRIVATE_KEY_FILE: ~/.ssh/id_rsa_oracle
TERRAFORM_CLI_PATH: /home/runner/work/_temp/c7c2fc59-08b4-4024-a3ad-51f0888e3e51
pythonLocation: /opt/hostedtoolcache/Python/3.9.5/x64
LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.9.5/x64/lib
/home/runner/work/_temp/19c58fa0-8bb2-4750-923a-c84ae87174a0.sh: line 2: ~/.ssh/id_rsa_oracle: No such file or directory
Error: Process completed with exit code 1.
Debugging with tmate · Actions · GitHub MarketplaceというActionを使って、ログインしてデバッグしてみました。
runner@fv-az177-482:~/work/terraform-cloud-oci/terraform-cloud-oci$ rm ~/.ssh/id_rsa_oracle
runner@fv-az177-482:~/work/terraform-cloud-oci/terraform-cloud-oci$ echo "$SECRET_KEY" > "$ANSIBLE_SSH_PRIVATE_KEY_FILE"
bash: ~/.ssh/id_rsa_oracle: No such file or directory
runner@fv-az177-482:~/work/terraform-cloud-oci/terraform-cloud-oci$ echo "$SECRET_KEY" > $(eval echo "$ANSIBLE_SSH_PRIVATE_KEY_FILE")
runner@fv-az177-482:~/work/terraform-cloud-oci/terraform-cloud-oci$ ls ~/.ssh/id_rsa_oracle
/home/runner/.ssh/id_rsa_oracle
runner@fv-az177-482:~/work/terraform-cloud-oci/terraform-cloud-oci$
結果は上記の通りで、環境変数を eval
で評価してあげないと、正しく読み込まれないようです。
Reference
コマンド出力について
terraform outputした時にデバッグ文字が表示され、json形式で出力されませんでした。
$ terraform output -json
[command]/home/runner/work/_temp/7710fe18-2ff4-48e1-ae3c-33adcb61e62d/terraform-bin output -json
{
"ipaddress": {
"value": [
"X.X.X.X"
]
}
}
::debug::Terraform exited with code 0.
::debug::stdout:
::debug::stderr:
::debug::exitcode: 0
::set-output name=stdout::
::set-output name=stderr::
::set-output name=exitcode::0
GitHub Actions では、各 step の値を取得するため上記のように出力にデバッグ文字が含まれる場合があります。step 内でコマンド実行結果をリダイレクトさせる場合などは、注意が必要です。
これを回避するためには、以下のようにコマンドを変更する必要がありました。
terraform
→ terraform-bin
に変更すると、デバッグ文字は表示されなくなりました。
$ terraform-bin output -json
{
"ipaddress": {
"value": [
"X.X.X.X"
]
}
}
このスクラップは2022/04/26にクローズされました