GitHub Actions repository_dispatch 이벤트를 사용하여 리포지토리간에 릴리스 이벤트 전파
9941 단어 GitHubActionsGitHub
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를 두드려 워크플로 실행
다음은 샘플 워크플로입니다. on
에 repository_dispatch
를 지정합니다.
※반복이 됩니다만 master 또는 디폴트 브랜치 밖에 트리거되지 않습니다.
test.ymlname: 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.ymlname: 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.ymlname: 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
끝
끝입니다.
Reference
이 문제에 관하여(GitHub Actions repository_dispatch 이벤트를 사용하여 리포지토리간에 릴리스 이벤트 전파), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takat0-h0rikosh1/items/d464f4733ff81fda23fc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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를 두드려 워크플로 실행
다음은 샘플 워크플로입니다.
on
에 repository_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.ymlname: 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.ymlname: 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
끝
끝입니다.
Reference
이 문제에 관하여(GitHub Actions repository_dispatch 이벤트를 사용하여 리포지토리간에 릴리스 이벤트 전파), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takat0-h0rikosh1/items/d464f4733ff81fda23fc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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"
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
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
끝
끝입니다.
Reference
이 문제에 관하여(GitHub Actions repository_dispatch 이벤트를 사용하여 리포지토리간에 릴리스 이벤트 전파), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takat0-h0rikosh1/items/d464f4733ff81fda23fc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(GitHub Actions repository_dispatch 이벤트를 사용하여 리포지토리간에 릴리스 이벤트 전파), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takat0-h0rikosh1/items/d464f4733ff81fda23fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)