この記事では GitHub Actions のアクションとして同一リポジトリーで定義した Docker イメージを使う方法を説明します。
GitHub Actions のワークフローで Docker イメージをビルドする方法などは扱いません。
ここでアクションとワークフローの単語を次のように使い分けます。
次にそれぞれのファイルの役割を説明します。
/.docker/Dockerfile
イメージを定義する Dockerfile です。/.docker のディレクトリーは任意です。どこでも構いません。
Dockerfile の中身は次のようにしました。
FROM pandoc/ubuntu:2.10.1 COPY entrypoint.sh / RUN chmod +x /entrypoint.sh ENTRYPOINT ["/entrypoint.sh"]
/.docker/entrypoint.sh
コンテナー内で実行するスクリプトです。
#! /bin/sh set -e echo "Hello, $1!"
/.github/actions/hello/action.yaml
アクションを定義するファイルです。/.github/actions/hello のディレクトリーは任意ですが、action.yaml の直上までがアクションの識別子となります。この場合は /.github/actions/hello
が識別子です。
name: hello description: say hello inputs: whom: description: who to say hello required: true default: world runs: using: docker image: ../../../.docker/Dockerfile args: - ${{ inputs.whom }}
using
に docker
を指定することでアクションとして Docker イメージを使用できます。inputs
でアクションの引数を定義し、runs.args
で docker run
時の引数として渡しています。
/.github/workflows/build.yaml
ワークフローを定義するファイルです。/.github/workflows/….yaml の形式のパスになります。
on : push jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: ./.github/actions/hello with: whom: Kazuki
jobs.….steps.uses
に先ほど定義したアクションの識別子を指定します。
これで、GitHub Actions のワークフローで Docker イメージをビルドしてコンテナーを起動し実行することができます。
ちなみに Docker Hub にアップロードされたイメージを利用する場合は下記のように書けます。
… jobs: build: … steps: … - uses: docker://alpine:3.8 …
参照
アクションとワークフローを別のリポジトリーにする場合は上記で解説されています。
同一リポジトリー内に定義したアクションを参照する方法は上記で解説されています。
GitHub Actions のアクションとする場合の Dockerfile の書き方は上記で解説されています。
action.yaml の文法と意味については上記で解説されています。