Runner in the High

技術のことをかくこころみ

Github Actionでdockerイメージをビルドし任意のコマンドを実行する

docker/docker-push-actionaddnab/docker-run-action というやつを組み合わせると最小構成でいい感じにできる。

name: Test
on: push

jobs:
  test:
    name: test
    runs-on: Ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - uses: docker/build-push-action@v2
        with:
          file: Dockerfile.test
          tags: yourtestapp
          push: false # pushするならここtrueでもいい

      - uses: addnab/docker-run-action@v3
        with:
          image: yourtestapp
          options: -v ${{ github.workspace }}:/src
          run: make test

ビルドするDockerfile.testはこういう感じ

FROM golang:1.16.14-bullseye

ENV APP_ROOT /src
WORKDIR $APP_ROOT

# download app deps
COPY go.mod $APP_ROOT
COPY go.sum $APP_ROOT
RUN go mod download

# use bash for entrypoint to run commands passed on running this Docker image
ENTRYPOINT ["/bin/bash", "-c"]

ローカルでもdocker上でテスト実行できるようにソースコードまるごとはCOPYしない。

あとは、最後のENTRYPOINTに /bin/bash -c を与えているのがポイント。こうしないと docker run に渡した任意のコマンドをコンテナ内で実行できない。