Github Actions의 수동 워크 플로 트리거


9

프로젝트 저장소에 Github Actions를 설정하고 있습니다.

워크 플로우는 다음 단계로 구성됩니다.

  • 도커 이미지 만들기
  • 컨테이너 레지스트리로 이미지 푸시
  • Kubernetes 배포를 롤아웃합니다.

그러나 두 가지 Kubernetes 배포가 있습니다. 하나는 개발 용이고 다른 하나는 프로덕션 용입니다. 따라서 두 개의 Github Action 워크 플로도 있습니다.

커밋이 푸시 될 때마다 개발을위한 Github Action 워크 플로우가 트리거됩니다.

on:
  push:
    branches:
    - master

그러나 나는 프로덕션 워크 플로우를 원하지 않습니다. 프로덕션 으로 보내기 버튼 과 같은 수동 트리거가 필요 합니다. 나는 문서에서 그에 가까운 것을 보지 못했습니다.


Github Actions에서 워크 플로를 수동으로 트리거하는 방법이 있습니까?

Github Actions, Docker 또는 Kubernetes에서 원하는 것을 달성하기 위해 개발 및 프로덕션 워크 플로우를 어떻게 분할 할 수 있습니까?

답변:


9

Github Actions에서 워크 플로를 수동으로 트리거하는 방법이 있습니까?

그렇게하기 위해 약간의 해킹이 있습니다 ...

watch 이벤트를 사용하면 별표를 지정하거나 별표를 해제하여 작업을 수동으로 트리거 할 수 있습니다. 워크 플로에서 이벤트 코드는 다음과 같습니다.

on:
  watch
    types: [started]

나는 그것이 이상한 똥이라는 것을 알고 있지만 작동합니다! 그럼에도 불구하고 잠재적 인 별을 가진 공개 저장소 인 경우 가장 좋은 방법은 아닙니다.


Github Actions, Docker 또는 Kubernetes에서 원하는 것을 달성하기 위해 개발 및 프로덕션 워크 플로우를 어떻게 분할 할 수 있습니까?

Github Actions에서 의미하는 것은 여러 워크 플로 / 작업을 수행하고 대상 분기 또는 이벤트별로 필터링 할 수 있다는 것입니다. 여러 이벤트를 결합 할 수 있습니다 (예 : 자정 에 푸시 및 워크로드에 대한 워크 플로우 트리거) .


7
하하, 이것은 대단한> repository_dispatch옆으로, 하나는 결합 할 수 watchif: github.actor == 'hackerman'임의 낯선 필터링. 또는 더 나은- if: github.actor == github.event.repository.owner.login추가 "보안": D
Samira

1
하하 감사합니다! 예, 좋은 생각입니다. 시간이 났을 때 이것을 시험해 보았습니다! : D
Sarah Abderemane

1
완벽하게 공식적으로 구현 된 것은 없지만 이것이 최선의 방법이라고 생각합니다.
Antoine C.

5

업데이트 : 슬래시 명령 스타일 "ChatOps"솔루션은 슬래시 명령 디스패치 작업을 참조하십시오 . 이를 통해 /deploy발행 및 풀 요청 주석에서 슬래시 명령 (예 :)으로 워크 플로우를 트리거 할 수 있습니다 .

다음은 deploy슬래시 명령 의 기본 예입니다 . 범위 REPO_ACCESS_TOKENrepo지정된 개인 액세스 토큰

name: Slash Command Dispatch
on:
  issue_comment:
    types: [created]
jobs:
  slashCommandDispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Slash Command Dispatch
        uses: peter-evans/slash-command-dispatch@v1
        with:
          token: ${{ secrets.REPO_ACCESS_TOKEN }}
          commands: deploy

이 워크 플로우에서 명령을 처리 할 수 ​​있습니다.

name: Deploy Command
on:
  repository_dispatch:
    types: [deploy-command]

더 많은 옵션과 다른 설정이 있습니다. 전체 사용법 은 슬래시 명령-디스패치 를 참조하십시오 .

원래 답변 : repository_dispatch다음과 같이 GitHub API를 호출하여 워크 플로를 수동으로 트리거 할 수 있습니다.

on:
  repository_dispatch:
    types: [production-deploy]
  • [username] GitHub 사용자 이름입니다
  • [token]repo범위 가 지정된 개인 액세스 토큰
  • [repository] 워크 플로가있는 리포지토리의 이름입니다.
curl -XPOST -u "[username]:[token]" \
  -H "Accept: application/vnd.github.everest-preview+json" \
  -H "Content-Type: application/json" \
  https://api.github.com/repos/[username]/[repository]/dispatches \
  --data '{"event_type": "production-deploy"}'

1
관심있는 사람은 여러 작업에 단일 워크 플로를 사용할 수 있습니다. 로 전송 된 내용 event_type은로 워크 플로에 사용할 github.event.action수 있으므로 필요할 때 특정 작업 / 단계를 활성화 / 비활성화 할 수 있습니다. 추신 : PAT는 실제로 필요하지 않습니다. curl을 시작 -u "[username]:[password]"하거나 심지어 -u "[username]"작동합니다 (두 번째 경우 curl은 사용자에게 암호를 묻습니다). 경우에 따라 사용하기 쉽습니다 (예 : 사용자 이름을 입력으로 사용하는 스크립트 또는 기술에 정통하지 않은 사용자가 사용하는 스크립트를 작성할 때).
Samira

2

Sarah의 게시물 은 원래 질문에 가장 가깝고 간단한 답변 이었지만 다소 해킹되었으므로 결국 dev다음 트리거를 사용 하는 분기를 만들었습니다 .

  • 개발 워크 플로 : dev지점 에서 푸시가 수행 될 때 트리거됩니다 .

    on:
      push:
        branches:    
          - dev
    
  • 생산 워크 플로우 : 풀 요청 / 병합에서 이루어집니다 때 트리거 devmaster:

    on:
      pull_request:
        branches:    
          - master
    

1

자세한 내용 / 설명을 위해 편집되었습니다.

할 수있는 한 가지는에 전화하는 것 repository_dispatch입니다. repository_dispatch here 사용에 대한 GitHub 설명서를 볼 수 있습니다 .

예를 들어 다음과 같은 GitHub 작업 워크 플로가있는 경우 :

on:
  repository_dispatch:
    types: [run_tests]
name: Run tests
jobs:
  test:
    name: Run your tests
    runs-on: ubuntu-latest
    steps:
      - run: |
          echo "I just ran all your tests!"

GitHub v3 API 문서 에 설명 된 단계에 따라 저장소 발송 이벤트를 작성할 수 있습니다 .

먼저 인증을 위해 GitHub 에서 개인 액세스 토큰 (PAT)만듭니다 .

그런 다음 다음 curl과 같이 실행할 수 있습니다 .

curl \
  -H "Authorization: token $YOUR_PAT" \
  --request POST \
  --data '{"event_type": "run_tests"}' \
  https://api.github.com/repos/$USER/$REPOSITORY/dispatches

동시에, 나는이 정확한 문제를 해결하는 친구와 함께 작업 한 작은 프로젝트를 공유하고 싶었습니다.

https://www.actionspanel.app/

ActionsPanel은 동일한 repository_dispatchAPI를 사용하지만 GitHub 앱 토큰과 함께 사용하므로 자체 PAT 관리에 대해 걱정할 필요가 없습니다. 또한 여러 사람이있는 팀 전체에서 작업을보다 쉽게 ​​트리거 할 수 있습니다.

사용자 요청 및 피드백을 기반으로 보낼 지점을 지정하는 기능이 내장되어 있으며 repository_dispatch작업을 실행할 때 매개 변수를 삽입하는 방법도 내장되어 있습니다.

리포지토리에 남겨둔 선언적 yaml 파일로 버튼을 구성하면 ActionsPanel에서 해당 파일을 읽고 UI를 동적으로 생성하여 작업을 트리거합니다.


0

현재 Github Action 오퍼링으로이를 해결하는 다른 방법 production은 배치가 필요할 때 마스터 에서 분기 를 작성하고 분기에서 배치 조치를 트리거하는 것 production입니다. production지점은 본질적으로의 거울이다 master.

on:
  push:
    branches:    
      - master

마스터에 커밋이있을 때마다 개발 빌드 / 푸시가 발생할 수 있습니다.

on:
  push:
    branches:    
      - production

릴리스 일정의 어느 시점에서 PR을 production지점으로 올릴 수 있습니다 . 이것은 prod 빌드 / 배치를 처리합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.