ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

Docker コンテナのアクションを作成する

このガイドでは、Docker コンテナのアクションを作成するために最低限必要なステップを案内します。

GitHub Actions is available with GitHub Free, GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. GitHub Actions is unavailable for per-repository plans, which are legacy billing plans. For more information, see "GitHub's products."

ここには以下の内容があります:

はじめに

これからビルドするアクションは、ログに "Hello World" を出力するものです。また、カスタム名を指定した場合は、"Hello [who-to-greet]" を出力します。

このプロジェクトを完了すると、あなたの Docker コンテナのアクションをビルドして、ワークフローでテストする方法が理解できます。

必要な環境

開始する前に、GitHub リポジトリを作成する必要があります。

  1. GitHub に新しいリポジトリを作成します。 リポジトリ名は任意です。この例のように "hello-world-docker-action" を使ってもいいでしょう。 詳しい情報については、「新しいリポジトリの作成」を参照してください。

  2. リポジトリをお手元のコンピューターにクローンします。 詳しい情報についてはリポジトリのクローンを参照してください。

  3. ターミナルから、ディレクトリを新しいリポジトリに変更します。

    cd hello-world-docker-action

Dockerfileの作成

新しいhello-world-docker-actionディレクトリ内に、新たにDockerfileというファイルを作成してください。

Dockerfile

# コードを実行するコンテナイメージ
FROM alpine:3.10

# アクションのリポジトリからコードファイルをファイルシステムパスへコピー
`/` of the container
COPY entrypoint.sh /entrypoint.sh

# dockerコンテナが起動する際に実行されるコードファイル (`entrypoint.sh`)
ENTRYPOINT ["/entrypoint.sh"]

アクションのメタデータファイル作成

新しい action.yml ファイルを、上で作成した hello-world-docker-action ディレクトリの中に作成します。 詳しい情報については、「GitHub Actions のメタデータ構文」を参照してください。

action.yml

# action.yml
name: 'Hello World'
description: 'Greet someone and record the time'
inputs:
  who-to-greet:  # id of input
    description: 'Who to greet'
    required: true
    default: 'World'
outputs:
  time: # id of output
    description: 'The time we greeted you'
runs:
  using: 'docker'
  image: 'Dockerfile'
  args:
    - ${{ inputs.who-to-greet }}

このメタデータは、1 つの who-to-greet 入力と 1 つの time 出力パラメータを定義しています。 Docker コンテナに入力を渡すには、inputs を使用して入力を宣言したうえで args キーワードを使用します。

GitHub は Dockerfile からイメージをビルドし、このイメージを使用して新しいコンテナでコマンドを実行します。

アクションコードを書く

任意のベース Docker イメージを選択できるので、アクションに任意の言語を選択できます。 次のシェルスクリプトの例では、who-to-greet 入力変数を使って、ログファイルに "Hello [who-to-greet]" と出力します。

次に、スクリプトは現在の時刻を取得し、それをジョブ内で後に実行するアクションが利用できる出力変数に設定します。 GitHub で出力変数を認識するには、##[set-output name=<output name>]<value> という形の特定の構文を使用する必要があります。 詳細については、「GitHub Actions の開発ツール」を参照してください。

  1. hello-world-docker-action ディレクトリに、新しい entrypoint.sh を作成します。

  2. 忘れずに、entrypoint.sh ファイルを実行可能ファイルにします。

    chmod +x entrypoint.sh
  3. entrypoint.shファイルに次のコードを追加します。

    entrypoint.sh

    #!/bin/sh -l
    
    echo "Hello $1"
    time=$(date)
    echo ::set-output name=time::$time

    entrypoint.shがエラーなく実行できたら、アクションのステータスはsuccessに設定されます。 アクションのコード中で明示的に終了コードを設定して、アクションのステータスを提供することもできます。 詳しい情報については「終了コードを使ったアクションのステータスの設定」を参照してください。

README の作成

アクションの使用方法を説明するために、README ファイルを作成できます。 README はアクションの公開を計画している時に非常に役立ちます。また、アクションの使い方をあなたやチームが覚えておく方法としても優れています。

hello-world-docker-action ディレクトリの中に、以下の情報を記述した README.md ファイルを作成してください。

  • アクションが実行する内容の詳細
  • 必須の入力引数と出力引数
  • オプションの入力引数と出力引数
  • アクションが使用するシークレット
  • アクションが使用する環境変数
  • ワークフローでアクションを使う使用方法の例

README.md

# Hello world docker action

このアクションは"Hello World"もしくは"Hello" + ログに挨拶する人物名を出力します。

## Inputs

### `who-to-greet`

**必須** 挨拶する相手の名前。 デフォルトは `"World"`## 出力

### `time`

挨拶した時間。

## 使用例

uses: actions/hello-world-docker-action@v1
with:
  who-to-greet: 'Mona the Octocat'

アクションの GitHub へのコミットとプッシュ

ターミナルから、action.ymlentrypoint.shDockerfile、および README.md ファイルをコミットします。

git add action.yml entrypoint.sh Dockerfile README.md
git commit -m "My first action is ready"
git push

ワークフローでアクションを試す

これで、ワークフローでアクションをテストできるようになりました。 プライベートリポジトリにあるアクションは、同じリポジトリのワークフローでしか使用できません。 パブリックアクションは、どのリポジトリのワークフローでも使用できます。

パブリックアクションを使用する例

次のワークフローコードでは、actions/hello-world-docker-container-actionというパブリックリポジトリにある完成した hello world アクションを使っています。 次のワークフローサンプルコードを .github/workflows/main.yml にコピーし、actions/hello-world-docker-action をあなたのリポジトリとアクション名に置き換えてください。 who-to-greet 入力を自分の名前に置き換えることもできます。

.github/workflows/main.yml

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
    - name: Hello world action step
      id: hello
      uses: actions/hello-world-docker-action@v1
      with:
        who-to-greet: 'Mona the Octocat'
    # Use the output from the `hello` step
    - name: Get the output time
      run: echo "The time was ${{ steps.hello.outputs.time }}"

プライベートアクションを使用する例

次のワークフローコードサンプルを、あなたのアクションのリポジトリの .github/workflows/main.yml ファイルにコピーします。 who-to-greet 入力を自分の名前に置き換えることもできます。

.github/workflows/main.yml

on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
    # このリポジトリのプライベートアクションを使うには、リポジトリをチェックアウトしなければなりません
    - name: Checkout
      uses: actions/checkout@v1
    - uses: ./ # Uses an action in the root directory
    - name: Hello world action step
      id: hello
      uses: actions/hello-world-docker-action@v1
      with:
        who-to-greet: 'Mona the Octocat'
    # `hello` ステップからの出力を利用
    - name: Get the output time
      run: echo "The time was ${{ steps.hello.outputs.time }}"

リポジトリから [Actions] タブをクリックして、最新のワークフロー実行を選択します。 "Hello Mona the Octocat"、またはwho-to-greet 入力に指定した名前とタイムスタンプがログに出力されます。

ワークフローでアクションを使用しているスクリーンショット

担当者にお尋ねください

探しているものが見つからなかったでしょうか?

弊社にお問い合わせください