■ はじめに
今回は、Github Actionsで、可読性を上げるために、 共通処理を外部シェルスクリプトとして切り出して、 Github Actionsから呼び出して使う。 小ネタではあるが、色々と学ぶものがあったので、メモ。
目次
【1】Github Actions処理 1)フォルダ構成 2)実装したGithub Actions 3)使用したシェルスクリプト 【2】気を付けるポイント Point1)シェルスクリプト自体は、Gitの構成のまま存在 Point2)シェルスクリプトの実行権限に注意 【3】自分用メモ:今回学べたこと 1)git update-index 2)$@ と $* の違い
【1】Github Actions処理
1)フォルダ構成
+ .github/workflows | + main.py | + run-airflow-cli-for-mwaa.sh + ...
2)実装したGithub Actions
name: CI on: push: branches: [ develop ] pull_request: branches: [ develop ] workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: # ★Point1★ - uses: actions/checkout@v4 # ★Point1★ / ★Point2★ - name: Call your script run: | .github/workflows/run-airflow-cli-for-mwaa.sh your-mwaa-name variables set KEY1 VALUE1 .github/workflows/run-airflow-cli-for-mwaa.sh your-mwaa-name variables set KEY2 VALUE2
3)使用したシェルスクリプト
https://medium.com/dnx-labs/how-to-use-apache-airflow-cli-with-amazon-mwaa-a773edfa0a45
のスクリプトを少し改良。
run-airflow-cli-for-mwaa.sh
#!/bin/bash MWAA_ENVIRONMENT=${1} shift 1 AIRFLOW_CLIS=("$@") # Check arguments if [ "$MWAA_ENVIRONMENT" = "" ]; then echo "Provide one argument as your MWAA name"; exit 1; fi if [ "$AIRFLOW_CLIS" = "" ]; then echo "Provide at least one argument to the Airflow CLI"; exit 1; fi # Get CLI token and web server hostname from AWS MWAA CLI CLI_JSON=$(aws mwaa create-cli-token --name $MWAA_ENVIRONMENT) # Parse results CLI_TOKEN=$(echo $CLI_JSON | jq -r '.CliToken') WEB_SERVER_HOSTNAME=$(echo $CLI_JSON | jq -r '.WebServerHostname') # Trigger request of Airflow CLI from Amazon MWAA RESPONSE=$(curl -s --request POST "https://$WEB_SERVER_HOSTNAME/aws_mwaa/cli" \ --header "Authorization: Bearer $CLI_TOKEN" \ --header "Content-Type: text/plain" \ --data-raw "${AIRFLOW_CLIS[*]}") # Check if we have a valid JSON to be parsed... if jq -e . >/dev/null 2>&1 <<<"$RESPONSE"; then # If JSON is valid then get stdout and stderr STDOUT=$(echo $RESPONSE | jq -r '.stdout') STDERR=$(echo $RESPONSE | jq -r '.stderr') # Decode the results from Base64 echo $STDOUT | base64 -d if [ "$STDERR" != "" ]; then echo "Error:" echo $STDERR | base64 -d fi else # In case of invalid JSON just return the message to the terminal echo $RESPONSE fi
【2】気を付けるポイント
Point1)シェルスクリプト自体は、Gitの構成のまま存在
当たり前なのかもしれないが、、、 シェルスクリプト自体は、Gitの構成のまま存在しているため、 呼び出す際は、例えば、以下のように呼び出すこと。 ~~~~~ .github/workflows/run-airflow-cli-for-mwaa.sh your-mwaa-name variables set KEY1 VALUE1 ~~~~~ これは、actions/checkout@vXで呼び出して、 Github Actionsでソースコードをcloneしているので。 actions/checkout@vXの詳細は、以下の関連記事を参照のこと
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Point2)シェルスクリプトの実行権限に注意
https://www.folklore.icu/github-actions/entrypoint-pd/
https://qiita.com/kakiuchis/items/ae33adb0bbd98d258432
で言われている通り、以下を行って、 実行権限を付与しないとエラーになってしまう。
予め行わなければならないgitコマンド例
# git update-index --add --chmod=+x シェル名 git update-index --add --chmod=+x .github/workflows/run-airflow-cli-for-mwaa.sh
【3】自分用メモ:今回学べたこと
1)git update-index
* まだちゃんと砕けていないので、ちゃんと理解する、、、
2)$@ と $* の違い
* ほぼ同じだが、以下の違いがある(これでハマってうまく動かなかった) + "$*" : "a b c" に展開される + "$@":"a" "b" "c" と別々の文字列に展開される
https://se.cite.ehime-u.ac.jp/~aman/memo/bash/shell_prog1.html
=> 以下の関連記事にも追記、、、
シェル ~ 基本編・引数あれこれ ~
https://dk521123.hatenablog.com/entry/2021/07/11/000421
関連記事
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/2023/12/21/155224
シェル ~ 基本編・引数あれこれ ~
https://dk521123.hatenablog.com/entry/2021/07/11/000421
MWAA ~ Variable ~
https://dk521123.hatenablog.com/entry/2023/12/28/002530
sedコマンド
https://dk521123.hatenablog.com/entry/2019/11/23/101625