0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

複数のDockerfileをbuildするGitHub Actionsのワークフロー設定

Last updated at Posted at 2021-04-02

GitHubリポジトリ

当リポジトリは以下を実現するためのGitHub Actionsのワークフロー設定(yamlファイル)の実装例です

実現したいこと

リポジトリに複数あるDockerfileをGitHub Actionsでbuildする
変更のあったファイルだけをbuildする

tree
.
├── .github
│   └── workflows
│       └── main.yaml
├── hello
│   ├── Dockerfile
│   └── hello.sh
├── world
│   ├── Dockerfile
│   └── world.sh
└── README.md
/.github/workflows/main.yaml
name: ci

on:
  push:
    branches:
    - 'main'
    paths-ignore:
    # 他のファイルも含めて変更があった場合はactionが動作してしまうので、
    # 以下がdocker buildの対象にならないようにstepsでチェックする
    - '.github/**'
    - 'README.md'

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
    - name: checkout
      uses: actions/checkout@v2
    - id: file_changes
      # changed filesをリスト化してくれるモジュール
      uses: trilom/file-changes-action@v1.2.4
      with:
        # パイプ処理したいため、changed filesリストを改行区切りにする
        output: '\n'
    - name: docker_build
      run: |
        # 
        # ${{ steps.file_changes.outputs.files }}
        # ↓
        # hello/Dockerfile
        # hello/hello.sh
        # world/world.sh
        # .github/workflows/main.yaml
        # ↓
        # hello
        # world
        # .github
        #
        echo -e "${{ steps.file_changes.outputs.files }}" | \
          awk '{sub("/.*", "");print $0;}' | \
          sort | \
          uniq | \
        while read line
        do
          echo "##### docker build -> ${line} #####"
          if [ ! -e ./${line}/Dockerfile ]; then
            # .githubとREADME.mdはこのロジックに入る
            echo "./${line}/Dockerfile not exists"
            continue
          fi

          docker build -t ${line} ./${line}
          # 確認のため
          docker run --rm ${line}
        done

動作確認

ケース1
以下のファイルを操作

  • /hello/hello.sh(modified)

⇒GitHub Actionsが以下ディレクトリをdocker build

  • /hello

(changed files)
image.png
(GitHub Actionsのログ)
image.png

ケース2
以下のファイルを操作

  • /hello/Dockerfile(new file)
  • /hello/hello.sh(new file)
  • /world/world.sh(modified)
  • /.github/workflows/main.yaml(modified)

⇒GitHub Actionsが以下ディレクトリをdocker build

  • /hello
  • /world

(changed files)
image.png
(GitHub Actionsのログ)
image.png

ケース3
以下のファイルを操作

  • /README.md(deleted)
  • /.github/workflows/main.yaml(modified)

⇒GitHub Actionsは動作しない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?