Pull Request에서 GiitHub Action을 트리거하여 Skip CI(Deprecated) 구현

9975 단어 GitHub Actionstech

이 기사에서 설명할 수법은 필요 없어요.


GiitHub Actions는 내장을 통해 Skip CIGitHub Actions: Skip pull request and push workflows with [skip ci] - GitHub Changelog를 지원합니다.다음 키워드가 포함된 메시지를 제출하면 Workflow의 실행이 자동으로 건너뜁니다.
  • [skip ci]
  • [ci skip]
  • [no ci]
  • [skip actions]
  • [actions skip]
  • 이 때문에 이 기사에 소개된 스킵 CI의 실현 방법은 불필요해졌다.미리 기사를 남기지만, 워크플로우에 다음과 같은 설명을 추가할 필요는 없다.

    이제 필요 없는 방법을 알려드릴게요.


    Pull Request에서 실행을 트리거하는 GiitHub Actions Workflow에서는 커밋 메시지에 특정 키워드[skip ci]가 포함된 경우 구문을 취소하는 방법을 설명합니다.

    Push 트리거의Workflow일 때


    푸시가 촉발하는 워크플로우에서는 다음 기사에 소개된 방법으로 스킵 CI의 구조를 구현할 수 있다.
  • 블로그: GiitHub Actions는ciskip을 수행할 수 있음
  • GiitHub Actions로 Skip CI의 -Qiita 구현
  • Workflow가 Push 이벤트에서 시작할 때 github 컨텍스트github.event.head_commit.message 속성에 제출 정보를 설정합니다.contains 내장 함수를 사용하여 커밋 메시지에 키워드가 있는지 조사한 다음 결과를 Job의 if로 반전 설정하여 Job의 실행 여부를 제어할 수 있습니다.
    on: push
    jobs:
      accept_commit:
        runs-on: ubuntu-20.04
        if: "! contains(github.event.head_commit.message, '[skip ci]')"
        steps:
        - run: echo "build is NOT skipped"
      build:
        runs-on: ubuntu-20.04
        needs: accept_commit
        steps:
    

    Pull Request가 Workflow를 트리거하는 경우


    Pull Request에서 트리거하는 Workflow에서는 github 컨텍스트 속성에 메시지를 제출하지 않았기 때문에 이 방법을 사용할 수 없습니다.반면 제출한 해시github.event.pull_request.head.sha는 속성에서 볼 수 있기 때문에 git log 명령으로 제출 정보를 얻고 grep 명령으로 키워드가 있는지 확인할 수 있다.다음은 예입니다.
    on: pull_request
    jobs:
      check_commit:
        runs-on: ubuntu-20.04
        env:
          SKIP_CI_KEYWORD: "[skip ci]"
        outputs:
          skip_ci: ${{ steps.check_message.outputs.skip_ci }}
        steps:
        - uses: actions/checkout@v2
          with:
            fetch-depth: 2
        - name: Check commit message
          id: check_message
          run: |
            message=$(git log --format=%B -n 1 ${{ github.event.pull_request.head.sha }})
            if echo "$message" | grep -q -F "${{ env.SKIP_CI_KEYWORD }}"; then
              echo "::set-output name=skip_ci::true"
            else
              echo "::set-output name=skip_ci::false"
            fi
      build:
        runs-on: ubuntu-20.04
        needs: check_commit
        if: ${{ needs.check_commit.outputs.skip_ci != 'true' }}
        steps:
    
    check_commit 임무에서 다음과 같은 사항을 수행한다.
  • 체크아웃 창고
  • 제출 산열github.event.pull_request.head.sha의 제출 메시지를 받아서 [skip ci]에 키워드가 포함되어 있는지 확인
  • 작업한 Outputcheck_commit에서 skip_ci 또는 true에서 조사한 결과
  • 를 설정한 결과뒤이어 작업false에서needs는 작업에 의존한다고 발표했고check_commit에서needs.check_commit.outputs.skip_ci는 작업을 참조할 수 있는check_commit Output이다.그리고 작업의skip_ci 조건문에서if가 아니면needs.check_commit.outputs.skip_ci 작업을(=true하면needs.check_commit.outputs.skip_citrue이면 작업집행을 취소) 스킵CI의 구조를 실현할 수 있다.check_commit 작업에서는 GITHUB_SHA를 제출한 산열로 사용할 수 없습니다.Pull Request가 트리거하는 Workflow에서 GITHUB_REF는 GiitHub에서 자동으로 생성된 PR 병합 분기refs/pull/:prNumber/merge를, GITHUB_SHA는 이 PR 병합 분기의 최신 제출Events that trigger workflows - GitHub Docs을 말한다.PR 결합 브랜치는 GiitHub에서 자동으로 생성된 브랜치로, Pull Request의 작업 브랜치와 베이스 브랜치가 결합된 상태를 추적합니다.Pull Request의 작업 지점과 기초 지점의 통합 제출은 항상 자동으로 만들어지고 Pull Request에서 터치하는 WorkflowGITHUB_SHA는 통합 제출을 가리킨다.이번에 제출하고자 하는 정보의 제출은 Pull Request 업무 지점의 최신 제출입니다.GITHUB_SHA 동작은 기본적으로 제출actions/checkout@v2만 취소하기 때문에 GITHUB_SHA 파라미터를 지정하여 이전의 제출로 돌려보내야 한다. fetch-depth: 2가 아니라 GITHUB_SHA의 제출이다.

    GiitHub Action 샘플


    위에서 소개한 방법의 샘플은 kafumi/github-actions-skip-ci-samples에 배치되어 있다.
  • Push 트리거의 Workflow 샘플: github.event.pull_request.head.sha
  • Skip CI 발동시 로그: https://github.com/kafumi/github-actions-skip-ci-samples/actions/runs/481904111
  • Pull Request Workflow 트리거 샘플: .github/workflows/push.yml
  • Skip CI 발동시 로그: https://github.com/kafumi/github-actions-skip-ci-samples/actions/runs/481904371
  • 좋은 웹페이지 즐겨찾기