여러 Dockerfile을 빌드하는 GitHub Actions 워크플로 설정

5362 단어 GitHubActions도커
GitHub 리포지토리

이 리포지토리는 다음을 실현하기위한 GitHub Actions 워크 플로 설정 (yaml 파일)의 구현 예입니다.

실현하고 싶은 것



리포지토리에 여러 개의 Dockerfile을 GitHub Actions로 빌드
변경된 파일만 빌드

나무
.
├── .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/[email protected]
      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)

    (GitHub Actions 로그)


    사례 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)

    (GitHub Actions 로그)


    사례 3
    다음 파일 작업
  • /README.md(deleted)
  • /.github/workflows/main.yaml(modified)

  • ⇒GitHub Actions는 작동하지 않음

    좋은 웹페이지 즐겨찾기