Closed2

GitHub Actions でハマったところ

yumenomatayumeyumenomatayume

環境変数

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

https://blog.n-z.jp/blog/2019-11-10-github-actions-tmate.html

yumenomatayumeyumenomatayume

コマンド出力について

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 内でコマンド実行結果をリダイレクトさせる場合などは、注意が必要です。

これを回避するためには、以下のようにコマンドを変更する必要がありました。

terraformterraform-bin に変更すると、デバッグ文字は表示されなくなりました。

$ terraform-bin output -json
{
  "ipaddress": {
		"value": [
      "X.X.X.X"
    ]
  }
}
このスクラップは2022/04/26にクローズされました