GitHub Actions repository_dispatch 이벤트를 사용하여 리포지토리간에 릴리스 이벤트 전파

9941 단어 GitHubActionsGitHub
타이틀대로입니다만 최근에는 GitHub Actions를 괴롭힐 기회가 많아, 리포지토리간에 릴리스 이벤트를 전파해 워크플로우를 실행하고 싶었기 때문에 비망록입니다.

repository_dispatch 사용


repository_dispatch 는 GitHub 외부 이벤트를 감지하기 위해 제공된 기능입니다. GitHub API에 제공된 엔드포인트에서 워크플로를 트리거할 수 있습니다. htps : // / cs. 기주 b. 코 m / 엔 / 아 c 치 온 s / 레후 렌세 / 에 ぇ ㅇ ts t t t ring r rkf ぉ ws # Reposhi와 ry_ ぢ s 빠 tch
repository_dispatch 이벤트는 워크 플로가 master 또는 기본 브랜치에있을 때만 실행됩니다.

repository_dispatch API 실행으로 워크플로 트리거



repository_dispatch API 정보



워크플로가 있는 리포지토리에 대해 API를 실행하여 워크플로를 실행할 수 있습니다.
API를 실행할 때 인증이 필요하므로 개인 액세스 토큰을 지정해야합니다.

또한 요청 본문에는 다음 필드를 지정해야 합니다.


필드
Description


event_type
문자열을 지정합니다. 트리거 된 워크 플로에서 이벤트 페이로드의 action으로 처리됩니다.

client_payload
트리거하는 이벤트에 전파되는 정보를 JSON 객체로 자유롭게 설정할 수 있습니다.


curl로 두드릴 때는 다음과 같은 느낌이 듭니다.
curl -X POST https://api.github.com/repos/:owner/:repo/dispatches \
  -H 'Accept: application/vnd.github.everest-preview+json' \
  -u $your_user:$your_personal_access_token \
  --data '{"event_type": "$your_event", "client_payload": { "customField": "customValue" }}'

API를 두드려 워크플로 실행



다음은 샘플 워크플로입니다. onrepository_dispatch 를 지정합니다.
※반복이 됩니다만 master 또는 디폴트 브랜치 밖에 트리거되지 않습니다.

test.yml
name: Repository Dispatch Sample

on: repository_dispatch

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Event Information
        run: |
          echo "Event is '${{ github.event.action }}'" 
          echo "Message is '${{ github.event.client_payload.message }}'"

실제로 API를 두드려 보면 워크 플로가 실행됩니다.





리포지토리간에 릴리스 이벤트를 전파하는 워크플로 만들기


repository_dispatch 를 사용하면 API를 통해 워크플로를 시작할 수 있으므로 워크플로 내부에서 API를 두드릴 수 있으면 워크플로에서 워크플로를 트리거할 수 있음을 알 수 있습니다.

이를 적용하여 리포지토리간에 릴리스 이벤트를 전파하는 워크플로를 구축했습니다.

릴리스 이벤트가 전파되는 워크 플로



릴리즈를 Publish 그러면 워크플로가 시작되고 태그와 같은 릴리즈 관련 정보를 client_payload로 묶어 API를 실행합니다. curl 명령의 -u 옵션에 지정하는 사용자명 및 퍼스널 액세스 토큰 및 사용자명은 secrets 로부터 읽어들입니다.

release.yml
name: Release

on:
  release:
    types: published
    tags: v*.*.*

jobs:
  Release:
    runs-on: ubuntu-latest
    steps:
      - name: Set var of release version 
        run: |
          echo ::set-env name=RELEASE_VERSION::${GITHUB_REF#refs/*/}

      - name: Set var of request header
        run: |
          echo ::set-env name=REQUEST_HEADER::"'"Accept:application/vnd.github.everest-preview+json"'"

      - name: Set var of request body
        run: |
          echo ::set-env name=REQUEST_BODY::'{"event_type": "release", "client_payload": { "repository": "'"$GITHUB_REPOSITORY"'", "tag_name": "'"$RELEASE_VERSION"'", "release_name": "Repository Dispatch Test"}}'

      - name: Repository dispatch
        run: |
          curl -X POST https://api.github.com/repos/:owner/:repo/dispatches \
          -H $REQUEST_HEADER \
          -u ${{ secrets.PERSONAL_ACCESS_TOKEN }} \
          --data "$REQUEST_BODY"

전파 대상 워크플로



받은 릴리스 관련 정보를 바탕으로 릴리스를 만듭니다. 워크플로에서 릴리스를 만들려면 create-release을 사용했습니다.

create_release.yml
name: Create Release

on: repository_dispatch

jobs:
  Create_Release:
    runs-on: ubuntu-latest
    steps:
      - name: Event Information
        run: |
          echo "Event '${{ github.event.action }}' received from '${{ github.event.client_payload.repository }}'"
      - name: Create Release
        if: github.event.action == 'release'
        uses: actions/create-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ github.event.client_payload.tag_name }}
          release_name: ${{ github.event.client_payload.release_name  }}
          draft: false
          prerelease: false

동작 확인



먼저 전파 소스 리포지토리에서 릴리스를 만듭니다.



릴리즈가 생성되면 워크플로가 시작되고 Repository dispatch A에서 전파 대상 저장소에 대해 repository_dispatch API를 실행하고 있음을 알 수 있습니다.



전파할 리포지토리의 동작을 확인합니다.





전파 대상에서도 워크플로 실행 및 릴리스 작성을 확인할 수 있었습니다.

참고



htps : // bg. 마 rc 색칠. 코 m / t Rigen Rin g-Ge Tee b-a c Chion s-A c Rot s- ぢ 훗 렌 t-레 포시 토리 s /
h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 58 177 786 / 게 t ぇ- 쿠렌 t 푸시 d



끝입니다.

좋은 웹페이지 즐겨찾기