Github Actions とGithub Package Registry が安定リリースとなりましたので、さっそく使ってみたメモです
この記事でやる事
Githubにあるリポジトリのdevelop
ブランチにPushがあった事をトリガに、Github Actionsでdocker build
を実行します
docker build
した結果を、Github Package Registryにpushして公開します
リポジトリ
関係ないファイルがリポジトリに混入していて申し訳ないですが、今回使用するのは以下の4ファイルのみとなります
1 2 3 4 5 6 7 .github/ └── workflows └── gh-registry.yml └── docker ├── Dockerfile ├── Makefile └── docker-compose.yml
作成: Dockerfile Nginxのスタートページをちょっとだけ差し替えただけの単純な物です
1 2 3 FROM nginx:latest RUN echo "Build from Github Actions. Generate: "$(date "+%Y/%m/%d %H:%M:%S") > /usr/share/nginx/html/index.html
作成: docker-compose.yml docker-composeは無くてもビルド出来ますが、Github Actionsでも使えるのかなと思って作ってみたら使えました
1 2 3 4 5 6 7 8 9 10 11 12 13 version: '2.3' services: actions-example: container_name: actions-example hostname: actions-example image: actions-example build: context: . dockerfile: Dockerfile ports: - 8080:80
作成: Makefile こちらもdocker-composeと同様、Github Actionsでmake
が使えるのかなと思って作ってみたら使えました
1 2 build: docker-compose build actions-example
作成: .github/workflows/gh-registry.yml cd
コマンドのところがやっつけ感がありますが即席なのでヨシとします
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 name: Build Dockerfile and Push Github Package Registry on: push: branches: - develop jobs: build-and-push: runs-on: ubuntu-18.04 timeout-minutes: 300 steps: - uses: actions/checkout@v1 - name: Build Image run: | cd docker/ && make build && cd ../
いったんコミット ここまででいったんコミットします
1 2 3 $ git add . $ git commit -m "initial commit." $ git push origin develop
コミット後、実際にビルドが動いているか確認します
リポジトリのページに行き、「Actions」タブを選択すると、ビルド実行状況が確認できると思います
Personal Access Tokenを取得する Github Actionsが使用するTokenを発行します。(右上のメニューから「Setting」→「Developer Setting」→「Personal access tokens」→「Generate new token」)
以下の赤枠のところが今回増えているので、権限をつけてTokenを作成します
TokenをSecretに保存する リポジトリのページに行き、「Settings」→「Secrets」と進むと、環境変数が設定出来るので、ここに先ほど取得したTokenを設定します
今回、NameはGH_ACCESS_TOKEN
としていますが、任意です
編集: .github/workflows/gh-registry.yml ymlファイルに、ビルドしたイメージをPushするActionを追加します
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 name: Build Dockerfile and Push Github Package Registry on: push: branches: - develop jobs: build-and-push: runs-on: ubuntu-18.04 timeout-minutes: 300 steps: - uses: actions/checkout@v1 - name: Build Image run: | cd docker/ && make build && cd ../ ## ここから追加 - name: Push to Github Package Registry run: | docker login docker.pkg.github.com -u nobiki -p ${{ secrets.GH_ACCESS_TOKEN }} docker tag actions-example docker.pkg.github.com/nobiki/actions-test/actions-example:latest docker push docker.pkg.github.com/nobiki/actions-test/actions-example:latest
docker login
の行で、先ほどのGH_ACCESS_TOKEN
を使用してログインしている事がわかります URLは、docker.pkg.github.com/[アカウント名]/[リポジトリ名]/[Image名]:[Tag名]
となるようです
コミット この内容でコミットします
1 2 3 $ git add . $ git commit -m "add actions - push package registry" $ git push origin develop
先ほどと同じくリポジトリのページに行き、「Actions」タブを選択すると、ビルド実行状況が確認できると思います うまくビルドが終わり、Package RegistryにPushが出来ていれば、リポジトリのページで下記のように「1 package」となり、パッケージの情報を見る事が出来る ようになっています(クリックでpullコマンドなどがコピペできます)
Package Registryからイメージをとってきてコンテナを作ってみる 作成したイメージをローカルマシンなどで使ってみます
1 2 3 4 5 6 7 // ログイン $ docker login docker.pkg.github.com -u nobiki Password: // pullする $ docker pull docker.pkg.github.com/nobiki/actions-test/actions-example:latest Error response from daemon: unauthorized: Your token has not been granted the required scopes to execute this query. The 'name' field requires one of the following scopes: ['read:packages'], but your token has only been granted the: [''] scopes. Please modify your token's scopes at: https://github.com/settings/tokens.
エラーになる。権限が無いらしい
公式によると、ここでログインする際には、先の手順で発行した権限つきのTokenをパスワードとして使用する のが正しいみたいです(さっき作ったGH_ACCESS_TOKEN
の値をパスワードに入力する) こんな仕様知らなくて30分ぐらいハマった
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // ログイン $ docker login docker.pkg.github.com -u nobiki Password: (※先に取得したPersonal Access Tokenの値を入力する) // pullする $ docker pull docker.pkg.github.com/nobiki/actions-test/actions-example:latest latest: Pulling from nobiki/actions-test/actions-example 8d691f585fa8: Already exists fea3111adf4a: Already exists 0f8661492b6d: Already exists 692f0881eac8: Pull complete Digest: sha256:e6e696ff5bd6e8c57194b098ccca57141b402357f36qd9376961e0b2e4a30ed6 Status: Downloaded newer image for docker.pkg.github.com/nobiki/actions-test/actions-example:latest docker.pkg.github.com/nobiki/actions-test/actions-example:latest // 確認 $ docker images | grep actions-example docker.pkg.github.com/nobiki/actions-test/actions-example latest 0b473e217eb8 12 minutes ago 126MB
pullできましたので、起動してみます
1 $ docker run -d --rm -p 8080:80 docker.pkg.github.com/nobiki/actions-test/actions-example
ビルドした内容のWebサーバが起動すればOKです(JSTになってないけど即席なのでヨシとする)
料金
現時点では、Publicリポジトリに関しては無料のようです。Privateリポジトリに関しては、実行時間と転送量ベースで制限があるようです(いくらか無料枠があります)