ノート: GitHub Actionsは、GitHub Enterprise Server 2.22で限定ベータとして利用可能でした。 ベータは終了しました。 GitHub Actionsは、GitHub Enterprise Server 3.0以降で一般に利用可能になりました。 詳しい情報については、GitHub Enterprise Server 3.0 のリリースノートを参照してください。
- GitHub Enterprise Server 3.0以降へのアップグレードに関する詳しい情報については「GitHub Enterprise Serverのアップグレード」を参照してください。
- アップグレード後のGitHub Actionsの設定に関する詳しい情報については、GitHub Enterprise Server 3.0のドキュメンテーションを参照してください。
ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情報を見ることができます。
Dockerfileの命令について
Dockerfile
には、Dockerコンテナの内容と起動時の動作を定義する命令と引数が含まれています。 Dockerがサポートしている命令に関する詳しい情報については、Dockerのドキュメンテーション中の「Dockerfile のリファレンス」を参照してください。
Dockerfileの命令とオーバーライド
Dockerの命令の中にはGitHub Actionsと関わるものがあり、アクションのメタデータファイルはDockerの命令のいくつかをオーバーライドできます。 予期しない動作を避けるために、DockerfileがGitHub Actionsとどのように関わるかについて馴染んでおいてください。
USER
DockerアクションはデフォルトのDockerユーザ(root)で実行されなければなりません。 GITHUB_WORKSPACE
にアクセスできなくなってしまうので、Dockerfile
中ではUSER
命令を使わないでください。 詳しい情報については、「環境変数の利用」と、Dockerのドキュメンテーション中のUSERのリファレンスを参照してください。
FROM
Dockerfile
ファイル中の最初の命令はFROM
でなければなりません。これは、Dockerのベースイメージを選択します。 詳しい情報については、Dockerのドキュメンテーション中のFROMのリファレンスを参照してください。
FROM
引数の設定にはいくつかのベストプラクティスがあります。
- 公式のDockerイメージを使うことをおすすめします。 たとえば
python
やruby
です。 - バージョンタグが存在する場合は使ってください。メジャーバージョンも含めることが望ましいです。 たとえば
node:latest
よりもnode:10
を使ってください。 - Debianオペレーティングシステムに基づくDockerイメージを使うことをおすすめします。
WORKDIR
GitHub Enterprise Serverは、ワーキングディレクトリのパスを環境変数のGITHUB_WORKSPACE
に設定します。 Dockerfile
中ではWORKDIR
命令を使わないことをおすすめします。 アクションが実行される前に、GitHub Enterprise ServerはGITHUB_WORKSPACE
ディレクトリを、Dockerイメージ内にあったその場所になにがあってもその上にマウントし、GITHUB_WORKSPACE
をワーキングディレクトリとして設定します。 詳しい情報については「環境変数の利用」と、Dockerのドキュメンテーション中のWORKDIRのリファレンスを参照してください。
ENTRYPOINT
アクションのメタデータファイル中でentrypoint
を定義すると、それはDockerfile
中で定義されたENTRYPOINT
をオーバーライドします。 詳しい情報については「GitHub Actionsのメタデータ構文」を参照してください。
DockerのENTRYPOINT
命令には、shell形式とexec形式があります。 DockerのENTRYPOINT
のドキュメンテーションは、ENTRYPOINT
のexec形式を使うことを勧めています。 execおよびshell形式に関する詳しい情報については、Dockerのドキュメンテーション中のENTRYPOINTのリファレンスを参照してください。
exec形式のENTRYPOINT
命令を使うようにコンテナを設定した場合、アクションのメタデータファイル中に設定されたargs
はコマンドシェル内では実行されません。 アクションのargs
に環境変数が含まれている場合、その変数は置換されません。 たとえば、以下のexec形式は$GITHUB_SHA
に保存された値を出力せず、代わりに"$GITHUB_SHA"
を出力します。
ENTRYPOINT ["echo $GITHUB_SHA"]
変数の置換をさせたい場合は、shell形式を使うか、直接シェルを実行してください。 たとえば、以下のexec形式を使えば、シェルを実行して環境変数GITHUB_SHA
に保存された値を出力できます。
ENTRYPOINT ["sh", "-c", "echo $GITHUB_SHA"]
アクションのメタデータファイルに定義されたargs
を、ENTRYPOINT
中でexec形式を使うDockerコンテナに渡すには、ENTRYPOINT
命令から呼ぶentrypoint.sh
というシェルスクリプトを作成することをおすすめします。
Dockerfileの例
# コードを実行するコンテナイメージ
FROM debian:9.5-slim
# アクションのリポジトリからコードをコンテナのファイルシステムパス `/` にコピー
COPY entrypoint.sh /entrypoint.sh
# Dockerコンテナの起動時に `entrypoint.sh` を実行
ENTRYPOINT ["/entrypoint.sh"]
entrypoint.shファイルの例
上のDockerfileを使って、GitHub Enterprise Serverはアクションのメタデータファイルに設定されたargs
を、entrypoint.sh
の引数として送ります。 Add the #!/bin/sh
shebang at the top of the entrypoint.sh
file to explicitly use the system's POSIX-compliant shell.
#!/bin/sh
# `$*`は`array`内で渡された`args`を個別に展開するか、
# 空白で区切られた文字列中の`args`を分割します。
sh -c "echo $*"
コードは実行可能になっていなければなりません。 entrypoint.sh
ファイルをワークフロー中で使う前に、execute
権限が付けられていることを確認してください。 この権限は、ターミナルから以下のコマンドで変更できます。
chmod +x entrypoint.sh
ENTRYPOINT
シェルスクリプトが実行可能ではなかった場合、以下のようなエラーが返されます。
Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"/entrypoint.sh\": permission denied": unknown
CMD
アクションのメタデータファイル中でargs
を定義すると、args
はDockerfile
中で指定されたCMD
命令をオーバーライドします。 詳しい情報については「GitHub Actionsのメタデータ構文」を参照してください。
Dockerfile
中でCMD
を使っているなら、以下のガイドラインに従ってください。
- 必須の引数をアクションのREADME中でドキュメント化し、
CMD
命令から除外してください。 args
を指定せずにアクションを利用できるよう、デフォルトを使ってください。- アクションが
--help
フラグやそれに類するものを備えているなら、アクションを自己ドキュメント化するために利用してください。
サポートされているLinuxの機能
GitHub Actionsは、DockerがサポートするデフォルトのLinuxの機能をサポートします。 機能の追加や削除はできません。 DockerがサポートするデフォルトのLinuxの機能に関する詳しい情報については、Dockerのドキュメンテーション中の「 Runtime privilege and Linux capabilities」を参照してください。 Linuxの機能についてさらに学ぶには、Linuxのman-pageの" Overview of Linux capabilities"を参照してください。