Hateburo: kazeburo hatenablog

SRE / 運用系小姑 / Goを書くPerl Monger

GitHub Actionsからさくらクラウドのコンテナレジストリ(Lab)にイメージをpushする

こちらのリポジトリが完成形です。

github.com

ここで紹介しているコンテナレジストリはLabプロダクトになります。「Labプロダクト」では、新機能の動作検証およびフィードバック収集を目的として、さくらのクラウドにおける開発中サービスを実験的に提供しておりますので、ご注意ください。

マニュアルはこちら

manual.sakura.ad.jp

「Labプロダクトとは」も合わせてご確認ください。

manual.sakura.ad.jp

コンテナレジトストリの作成

さくらのクラウドのメニューからコンテナレジトストリを選び、「追加」ボタンを押します。

f:id:kazeburo:20210122172222p:plain

f:id:kazeburo:20210122172400p:plain

公開・非公開は目的に応じて選択してください。

コンテナレジストリができたら、push/pullするためのユーザを作成します。

f:id:kazeburo:20210122172747p:plain

権限も適したものを選びましょう。今回はGitHub Actionsからpushを行うので、「Push & Pull」がよさそうです。

f:id:kazeburo:20210122172836p:plain

このアカウントはコンテナレジストリにのみ使われるアカウントになります。

GitHubリポジトリにシークレット登録

コンテナイメージを作成するリポジトリの Settings -> Repository secrets にて、先ほど作成した id とパスワードを SAKURACR_USER、SAKURACR_PASSWORDとして登録しました。

workflow YAMLの作成

リポジトリ.github/workflow/ 以下にコンテナイメージの作成とコンテナレジストリ(Lab)にpushするためのYAMLファイルを作成します。

さくらのコンテナレジストリ(Lab)はDocker開発元が提供するDocker Hub互換のレジストリサービスであり、プロトコルにも互換性があります。GitHub Container RegistryやAWSのコンテナレジストリにpushする際に利用できる docker/login-actiondocker/build-push-action の Actionを特にカスタマイズすることなく使えます。

github.com

http-dump-requestでは次のようにファイルを作成しました。

name: release
on:
# gitのtagが作られた時
  push:
    tags:
    - "v[0-9]+.[0-9]+.[0-9]+"

jobs:
  build_and_push:
    runs-on: ubuntu-latest
    env:
      IMAGE_NAME: http-dump-request
      REGISTRY: nomadscafe.sakuracr.jp
    steps:
      - name: checkout
        uses: actions/checkout@v2

# tagを入手
      - name: Set tag to environment variable
        id: set-tag
        run: echo ::set-output name=version::${GITHUB_REF#refs/*/}

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1

      - name: Login to Sakura Container Registry
        uses: docker/login-action@v1
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ secrets.SAKURACR_USER }}
          password: ${{ secrets.SAKURACR_PASSWORD }}

      - name: Build and push
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: |
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.set-tag.outputs.version }}

このファイルをコミットしgit tagを作成すると、狙い通りイメージの作成とさくらのコンテナレジトストリ(Lab)へのpushができました。

2021年1月現在、コンテナレジストリ(Lab)にはイメージの一覧機能がないので、今回つくったコンテナは以下のコマンドでレジストリからpullして実行ができることで動作を確認しました。

$ docker run -p 3000:3000 nomadscafe.sakuracr.jp/http-dump-request

おまけ

http-dump-request について

似たようなモノはたくさんありそうですが、検証の際に使える http request をそのままレスポンスとして返す Go のサーバです。

f:id:kazeburo:20210125153518p:plain

こんな感じで表示できます。上記で紹介しておりますが、 nomadscafe.sakuracr.jp/http-dump-request から docker pullして利用できます。