【GitHub Actions】 한 리포지토리에 push를 트리거로 다른 리포지토리의 워크 플로를 시작하는 방법

한 리포지토리에 대한 push를 트리거로, 또 다른 리포지토리의 GitHub Acions 워크플로를 시작하는 방법을 조사했을 때의 메모입니다.

환경
  • GitHub Actions: 2020년 6월 시점의 것
  • GitHub Rest API: v3

  • 하고 싶은 일



    아래 그림과 같이 리포지토리 A에 push된 것을 계기로 리포지토리 B의 GitHub Actions 워크플로우를 실행하고 싶다는 것입니다.



    만든 것



    최종적으로 완성된 구성은 다음과 같습니다.



    필요한 작업은 다음과 같습니다.

    (1)-1: GitHub API를 이용하기 위한 personal access token 취득

    (1)-2: Rest API에서 repository dispatch event 작성

    (2) : repository_dispatch를 트리거 한 워크 플로우 시작

    이하, 작업 내용의 상세입니다.

    (1)-1 personal access token 취득



    GitHub Actions 워크플로에서 GitHub API를 사용하려면 personal access token을 검색해야 합니다.

    다음 페이지를 참고하여 취득합니다.

    GitHub - Creating a personal access token

    ※ 필요한 scope는 repo 입니다.

    작성한 personal access token은 리포지토리 A의 secrets에 저장합니다.

    GitHub - 암호화된 비밀 만들기 및 저장

    저장된 toke는 (1)-2로 Rest API를 실행할 때 secrets.MY_GITHUB_ACCESS_TOKEN에서 사용합니다.

    (1)-2 repository dispatch event의 작성



    리포지토리 A에 push된 것을 계기로 Rest API에서 repository dispatch event를 작성합니다.

    API의 사양은 다음과 같습니다.

    GitHub - Create a repository dispatch event

    리포지토리 A의 GitHub Actions의 yml 파일 내용
    on:
      push:
        branches:
          - master
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: Create GitHub dispatch event
          run: |
            curl --request POST 'https://api.github.com/repos/username/repository-b-name/dispatches' \
            --header 'Authorization: Bearer ${{secrets.MY_GITHUB_ACCESS_TOKEN}}' \
            --header 'Content-Type: application/json' \
            --data-raw '{
              "event_type": "repository-a-updated"
            }'
    

    (2) repository_dispatch를 트리거로 한 워크 플로우의 기동



    리포지토리 A에서 리포지토리 B로 리포지토리 디스패치 이벤트가 전달되므로 리포지토리 B에서 받을 수 있습니다.
    repository_dispatch 라는 이벤트를 받으면 GitHub Actions 워크플로를 시작할 수 있습니다.

    GitHub - Events that trigger workflows

    리포지토리 B GitHub Actions의 yml 파일 내용
    on:
      repository_dispatch:
        types: 
          - repository-a-updated # repository_dispatch送出時のevent_typeの名前と揃える
    
    jobs:
      build:
        name: Build
        runs-on: ubuntu-latest
        steps:
          - name: Checkout Repo
            uses: actions/checkout@master
          # 適宜、テストやビルドを実行
    

    참고



    GitHub Support Community - Triggering by other repository

    GitHub Support Community - Trigger a workflow from another workflow

    Github Actions를 사용할 수 있게 되었기 때문에 사용해 본다

    Github Actions 사용법 노트

    Github Actions 4개월 사용해 보았던 일 정리

    좋은 웹페이지 즐겨찾기