■ はじめに
https://dk521123.hatenablog.com/entry/2024/06/27/220219
の続き。 前回は、Github Custom Action の JavaScript をやったので、 今回は、Docker コンテナーのアクションについて取り上げる
目次
【1】Docker コンテナーのアクション 【2】使用上の注意 1)セルフホステッドランナ時の注意点 【3】サンプル 0)前提条件 1)リポジトリの作成 2)action.ymlの作成 3)Dockerfileの作成 4)ローカルでのテスト 5)GitHub Actionsでのテスト
【1】Docker コンテナーのアクション
* Docker コンテナー生成し、その上で動くアクション
https://docs.github.com/ja/actions/creating-actions/about-custom-actions#docker-container-actions
【2】使用上の注意
1)セルフホステッドランナ時の注意点
* セルフホステッドランナの場合、Dockerをインストールしてある必要がある => docker を内部的に使うので、当たり前っちゃー当たり前だが。
https://docs.github.com/ja/actions/creating-actions/about-custom-actions#docker-container-actions
【3】サンプル
* 「0)前提条件」~「1)リポジトリの作成」の流れは、以下の関連記事と同じ
https://dk521123.hatenablog.com/entry/2024/06/27/220219
0)前提条件
* 以下がインストールされていること + git + docker [ローカル上確認する場合。Self-hosted runnerの場合は必須] => Docker 使うので、Linux上で作業することを推奨
Node.js ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2021/11/06/000000
1)リポジトリの作成
mkdir hello-world-docker-action cd hello-world-docker-action # Git初期化 git init git add . git commit -m "initial commit for hello world of custom docker action"
最終的な主なフォルダ構成
hello-world-docker-action ├─.github │ └─workflows │ └─ demo.yml ├─action.yml ├─Dockerfile └─entrypoint.sh ... 改行はLFであること(特にWindowsで注意)
2)action.ymlの作成
* 前回との違いは、runs 部分のみ。
action.yml
name: 'hello_world_docker_demo' description: 'This is just hello world for docker...' branding: icon: check-circle color: orange inputs: input_id1: description: 'This is a sample input' required: true default: 'Hi, world' outputs: output_id1: description: 'This is a sample output1' # ★ここに注目 runs: using: 'docker' image: 'Dockerfile' env: INPUT_ID1: ${{ inputs.input_id1}}
3)Dockerfileの作成
[1] Dockerファイルを作成
FROM amazonlinux COPY entrypoint.sh /entrypoint.sh ENTRYPOINT ["./entrypoint.sh"]
[2] 周辺のBashファイル(entrypoint.sh)を作成
#!/bin/bash if [ -z "${INPUT_ID1}" ] then echo "No input data..." exit 1 fi echo "output_id1=${INPUT_ID1}" >> "${GITHUB_OUTPUT}" cat "${GITHUB_OUTPUT}"
[3] entrypoint.shを実行可能にする
$ git add entrypoint.sh $ git update-index --chmod=+x entrypoint.sh $ chmod +x entrypoint.sh
補足:Docker コンテナアクションで失敗終了コードを設定する
https://docs.github.com/ja/actions/creating-actions/setting-exit-codes-for-actions#setting-a-failure-exit-code-in-a-docker-container-action
# Docker コンテナー アクションを作成する場合は、 # entrypoint.sh スクリプトにエラー終了コードを設定できます。 # 次に例を示します。 if <condition> ; then echo "Game over!" exit 1 fi
4)ローカルでのテスト
# Dockerビルド $ docker build -t hello-world-docker-action:latest ./ # Docker実行 $ docker run --rm --name hello-world-docker-action \ -e INPUT_ID1="Hello world!!" -e GITHUB_OUTPUT=/dummy.txt hello-world-docker-action:latest # 以下が表示されたらOK output_id1=Hello world!
5)GitHub Actionsでのテスト
[1] コミットおよびハッシュタグ取得
$ git add . $ git commit -m "[add] add a container action" # ハッシュタグ取得 $ git show --format='%H' --no-patch # 完全なハッシュ %H / 短縮版のハッシュ %h # --no-patch: コミットの diff 出力を行わないようにする 1bba806...
[2] .github/workflows/demo.yml 作成
name: DemoCustomDockerAction on: workflow_dispatch: jobs: demo-custom-action: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v4 - name: Call Demo action id: call-demo # ★ここ修正★ uses: your-github-user-name/hello-world-docker-action@1bba806... with: input_id1: 'Hello world!!!?' - name: Show result run: | echo ${{ env.output_id1 }} env: output_id1: ${{ steps.call-demo.outputs.output_id1 }}
[3] コミットおよびハッシュタグ取得
# Step1: githubで新たにrepositoryでリポジトリ作成 # => <Your-ID>@hello-world-docker-action # Step2: コミット $ git add . $ git commit -m "[add] add a Github workflow" $ git show --format='%H' --no-patch # 1bba806... ってなるので、修正し、またコミット # Step3: Remote へ Push $ git remote add origin https://github.com/dk521123/hello-world-docker-action.git $ git push -u origin master
参考文献
公式ドキュメント
https://docs.github.com/ja/actions/creating-actions/creating-a-docker-container-action
一般サイト
https://aadojo.alterbooth.com/entry/2023/06/01/183019
メモ
https://qiita.com/ohnitakahiro/items/d581317f5473a68ca368
関連記事
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 Custom Action ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/06/27/220219
Github Custom Action ~ 複合アクション ~
https://dk521123.hatenablog.com/entry/2024/06/29/021837
Github Custom Action ~ Custom Actionを使ってもらうには ~
https://dk521123.hatenablog.com/entry/2024/06/30/224058
Git ~ 基本編 / 基本コマンド ~
https://dk521123.hatenablog.com/entry/2020/10/02/000000