목표
빌드에 실패하는 PR은 merge가 불가능 하도록, github action을 이용해 구현해보자! (그런데 서브모듈을 추가한)
서브모듈도 포함하여 빌드 테스트를 돌리는 workflow.yml을 작성했다.
name: backend-build-test
# PR 요청에 대해
on:
pull_request:
branches:
- develop # develop 브랜치에서 pr 이벤트가 일어났을 때 실행
defaults:
run:
working-directory: ./backend # build steps의 run을 ./backend 경로에서 실행
jobs:
build:
# label이 [backend] (id: 3141722951) 일때만 동작
if: contains(github.event.pull_request.labels.*.id, 3141722951)
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v2
with:
submodules: true
token: ${{ secrets.SUBMODULE_ACCESS_TOKEN }}
- name: Build Test
run: ./gradlew bootJar
Shell
복사
서브모듈 추가하기
uses절에 with문을 추가하면 된다.
토큰 등록은 다음과 같이 할 수 있다.
•
private 서브모듈 레포지토리에 admin 권한을 가지고 있는 계정이어야 한다.
1.
계정 프로필의 Developer settings → Generate new token 을 클릭한다.
2.
권한 중 repo를 체크한다. 나머지 권한은 필요한 경우가 아니라면 체크하지 않는다.
3.
저장을 누르면 나오는 토큰을 복사한다. 이 내용은 다시는 표시되지 않으므로, 실수로 클립보드에서 날려먹거나 했다면 새로 발급받아야 한다.
4.
레포지토리로 돌아간다. Settings → Secrets → new repository secret를 클릭한다.
5.
위에서 복사했던 키를 입력한다.
Name은 환경변수의 변수명으로 쓰이니, 유념해서 짓는다.
- name: Checkout source code
uses: actions/checkout@v2
with:
submodules: true
token: ${{ secrets.SUBMODULE_ACCESS_TOKEN }}
Shell
복사
6.
이제 workflow.yml에서 서브모듈을 인식할 수 있다! 서브모듈이 있어야 통과할 수 있는 테스트도 잘 통과한다.
Merge block 하기
1.
한번이라도 status check를 돌리고 나면, Settings → Branches → Branch Protection Rule에서 머지되기전에 반드시 테스트를 통과해야 가능하도록 만들 수 있다.
2.
search for status checks 를 할 때, Jobs 하위의 check의 이름을 검색하면(우리의 경우 build) 결과가 나온다. 해당 내용을 추가해 주면 된다.
jobs:
build:
# label이 [backend] (id: 3141722951) 일때만 동작
if: contains(github.event.pull_request.labels.*.id, 3141722951)
runs-on: ubuntu-latest
Shell
복사
3.
이후 develop에 머지될 때, 테스트가 통과하지 않으면 머지할 수 없는 것을 확인할 수 있다.