GitHub Actions와의 통합 테스트
요점은 내 PR의 커밋에 대해 실행되는 것을 원하지 않는다는 것입니다.
예, 이 흐름은 저에게 적합하지 않습니다.
name: Java CI
on: [push]
jobs:
build:
병합하기 전에 실행하기를 원합니다. 벨로우즈 흐름이 저를 만족시킬까요?
name: Java CI
on:
push:
branches:
- master
아니요, 너무 늦었습니다. 코드가 이미 병합되었으며 테스트가 실패하면 어떻게 될까요? 주인이 망가졌어? 안 돼, 병합 전에 실행하고 싶어...
"봇"스타일 솔루션을 생각해 냈고 PR에 주석을 작성하면 통합 작업이 트리거됩니다. 병합할 준비가 되기 전에 트리거하는 것이 도움이 될 수 있습니다. 내 PR 상태입니다.
해당 솔루션에는 2가지 문제가 있습니다(자동이 아니며 누군가 CI 작업을 "요청"해야 한다는 점 외에).
솔루션을 약간 복잡하게 만들 수 있으므로 두 가지 모두 처리할 수 있습니다.
흐름을 단계별로 설명하겠습니다.
여기에 트리거가 있습니다. 댓글별로 실행하고 싶습니다.
name: integration-test
on:
issue_comment:
types: [created]
단, "ci"텍스트가 포함된 주석에만 해당:
댓글 텍스트를 확인하고 해당 댓글이 내 트리거 단어와 일치하면 출력을 제공하는 niceaction를 사용합니다. 댓글이 일치하면 이모티콘을 추가할 수 있는 멋진 기능도 있습니다.
steps:
- uses: khan/pull-request-comment-trigger@master
id: check
with:
trigger: 'ci'
reaction: rocket
env:
GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}'
내 의견이 확인된 후 작업 링크와 함께 PR에 메시지를 보내고 싶습니다. 빌드가 PR 컨텍스트에서 실행되지 않고 PR과 빌드하면 이 의견을 PR에 다시 보냅니다.
- name: send comment
if: steps.check.outputs.triggered == 'true'
env:
URL: ${{ github.event.issue.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl \
-X POST \
$URL \
-H "Content-Type: application/json" \
-H "Authorization: token $GITHUB_TOKEN" \
--data '{ "body": ":test_tube: [starting ci integration job]( https://github.com/'"$GITHUB_REPOSITORY"'/actions/runs/'"$GITHUB_RUN_ID"')" }'
다음 단계는 이미 말했듯이 PR 컨텍스트에서 빌드가 실행되지 않기 때문에 필요합니다.
- name: Get PR informations
if: steps.check.outputs.triggered == 'true'
id: pr_data
run: |
echo "::set-output name=branch::${{ fromJson(steps.request.outputs.data).head.ref }}"
echo "::set-output name=repo_name::${{ fromJson(steps.request.outputs.data).head.repo.full_name }}"
echo "::set-output name=repo_clone_url::${{ fromJson(steps.request.outputs.data).head.repo.clone_url }}"
echo "::set-output name=repo_ssh_url::${{ fromJson(steps.request.outputs.data).head.repo.ssh_url }}"
- name: Checkout PR Branch
if: steps.check.outputs.triggered == 'true'
uses: actions/checkout@v2
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: ${{ fromJson(steps.request.outputs.data).head.repo.full_name }}
ref: ${{ steps.pr_data.outputs.branch }}
그리고 마지막으로 확인된 커밋 개정을 단계 출력에 추가합니다. 다음 단계에서 필요합니다.
- name: debug
if: steps.check.outputs.triggered == 'true'
id: debug
run: |
echo ::set-output name=sha::$( curl -u "u:${{github.token}}" https://api.github.com/repos/${{steps.pr_data.outputs.repo_name}}/git/ref/heads/${{steps.pr_data.outputs.branch}} | jq .object.sha | tr -d '"' )
이제 일반 빌드 단계가 시작됩니다. 제 경우에는 Maven으로 Java 단위 테스트를 실행합니다(-Pci는 통합 테스트만 실행하는 maven 프로필을 켭니다).
- name: Set up JDK 1.8
if: steps.check.outputs.triggered == 'true'
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Maven
if: steps.check.outputs.triggered == 'true'
run: mvn clean install -Pci
이 단계 후에 작업이 실패하거나 성공했으며 상태를 나타내는 메시지를 보내려고 합니다. 그러면
${{GITHUB_RUN_ID}}
를 사용하여 작업 빌드 URL이 포함된 링크가 전송됩니다. - name: Create success comment
if: steps.check.outputs.triggered == 'true' && success()
env:
URL: ${{ github.event.issue.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl \
-X POST \
$URL \
-H "Content-Type: application/json" \
-H "Authorization: token $GITHUB_TOKEN" \
--data '{ "body": ":v: [finish ci integration job successfully]( https://github.com/'"$GITHUB_REPOSITORY"'/actions/runs/'"$GITHUB_RUN_ID"')" }'
- name: Create fail comment
if: steps.check.outputs.triggered == 'true' && failure()
env:
URL: ${{ github.event.issue.comments_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
curl \
-X POST \
$URL \
-H "Content-Type: application/json" \
-H "Authorization: token $GITHUB_TOKEN" \
--data '{ "body": ":facepalm: [ci integration job failed]( https://github.com/'"$GITHUB_REPOSITORY"'/actions/runs/'"$GITHUB_RUN_ID"')" }'
보너스 부분!
빌드에 Surefire 보고서가 있는 경우 관련됨
this nice 작업을 사용하여 테스트 보고서를 생성할 수 있습니다.
그러나 PR 자체에서 테스트 결과를 보려면 마지막 PR 커밋을 보내야 합니다. 이것이 제가
debug
단계에서 커밋 sha id를 출력하는 이유입니다. - name: Publish Test Report
if: steps.check.outputs.triggered == 'true' && (failure() || success())
uses: scacap/action-surefire-report@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
commit: ${{ steps.debug.outputs.sha }}
check_name: integration_test_results
그건!
PR 대화에서 다음과 같이 표시됩니다.
Reference
이 문제에 관하여(GitHub Actions와의 통합 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/brachiwernick/integration-test-with-github-actions-2fma텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)