Travis-CI를 구성하여 풀 리퀘스트를 빌드하고 중복없이 마스터에 병합하는 방법
"BDD"용어로 넣으려면 :
배경 :
내가 GH 저장소에 기여하고 있다는 점을 감안할 때풀 리퀘스트를 생성하면
Travis가 최신 커밋을 빌드해야합니다.기존 풀 리퀘스트에 푸시하면
Travis가 최신 커밋을 빌드해야합니다.풀 리퀘스트를 마스터에 병합하면
Travis는 마스터를 빌드해야합니다.
Travis-CI의 "빌드 푸시"및 "빌드 PR"설정에 혼란 스러웠습니다.
- 둘 다 활성화하면 Travis가 각 Pull Request를 두 번 빌드합니다.
- 해당 분기에 대한 커밋에 한 번
- 해당 분기의 병합 커밋을 대상으로 다시 한 번
- "빌드 PR"만 활성화하면 PR이 빌드되지만 병합 후 빌드가 생성되지는 않습니다 (예 : 마스터에서).
- "푸시"무차별 대입을 활성화 하면 저장소에 대한 모든 푸시를 구축하여 위의 기준을 충족합니다 . 화이트리스트와 블랙리스트 브랜치를 통해 문제를 해결하려고 할 수 있지만 브랜치 이름을 엄격하게 훈련하지 않는 한 그것은 아마도 당신을 물릴 것입니다.
이것은 Travis-CI 문서 및 GH 문제 # 3241에 자세히 설명되어 있습니다.
위의 기준을 충족하는 구성을 아는 사람이 있습니까?
결국 PR과 푸시를 모두 활성화하는 아이디어를 얻었지만 특정 브랜치에 대한 푸시를 제한하는 화이트리스트가있는 또 다른 GH 문제 ( # 2111 )를 발견했습니다 . 이것은 내 워크 플로의 기준을 충족하는 것 같습니다. 내가 한 일은 다음과 같습니다.
- 저장소에 대한 Travis 설정에서 PR 및 분기 푸시를 모두 활성화합니다.
- 변경
.travis.yml
에 대한 화이트리스트master
지점 (즉, 유일한 마스터에 푸시를 구축)
가지 : 뿐: -마스터
변경 사항이 있는 PR을
.travis.yml
만들고 일부 빈 커밋이있는 다른 PR 을 만들어 포크에서도 작동 하는지 확인하여 테스트합니다 .master에서 성공적인 병합 커밋 빌드를 확인합니다 .
트래비스 문서 에서 방금 찾았습니다.
.travis.yml에 추가
if: type = push
또는 :
if: type = pull_request
허용 된 답변에 설명 된 화이트리스트 접근 방식에는 몇 가지 중요한 제한이 있습니다. 특히 PR을 열지 않고 임의의 분기를 중복되지 않게 구축하는 것은 지원하지 않습니다.
나는 더 나은 해결책을 요구하는 문제를 열었습니다 .
모든 PR 을 만들고 싶다고 가정하면 다음과 같은 것이 트릭을 수행합니다. 설정 페이지에서 브랜치 및 PR 빌드를 모두 활성화하고이 행을 다음의 첫 번째 행으로 지정하십시오 travis.yml
.
if: (type = push AND branch IN (master, dev)) OR (type = pull_request AND NOT branch =~ /no-ci/)
이렇게하면 모든 푸시에 대해 푸시 빌드를 시도하고 공개 PR에 대한 모든 푸시에 대해 PR 빌드를 시도하지만 조건을 충족하지 않는 항목은 필터링합니다. 이 부분을 약간 수정해야 할 수도 있습니다. 이름에 no-ci를 사용하여 브랜치를 빌드하지 않는 것에 대한 절은 분명히 선택 사항이며 항상 빌드를 실행하려는 두 브랜치가 없을 수 있습니다.
Travis 사이트 에서 조건 및 조건부 빌드 에 대해 자세히 읽을 수 있습니다 .
master
분기뿐만 아니라 일부 다른 분기도 테스트하려는 경우 다음 워크 플로를 사용할 수 있습니다 .
- "빌드 푸시"및 "빌드 풀 요청"을 모두 ON으로 유지하십시오.
에
branches:except
지시문을 추가 하십시오.travis.yml
.branches: except: - /^pr\..*/
이 구성에서 :
- 분기에 대한 모든 커밋
feature-A
은 빌드를 트리거합니다. - 분기에 대한 커밋
pr.feature-A
은 빌드를 트리거하지 않습니다. pr.feature-A
열린 풀 요청에서 브랜치 를 사용 하면 빌드가 트리거됩니다.
워크 플로 예
- 여러 개발자간에 공유되는 임시 WIP 분기 :
wip.feature-A
,이 분기에 대한 모든 커밋은 빌드를 트리거합니다. - 브랜치를 병합 할 준비가되면
master
fromwip.feature-A
to의 이름을 바꾸고pr.feature-A
pull request를 열 수 있습니다. - 풀 리퀘스트를 검토하는 동안 새로운 수정 사항을 적용하려면
pr.feature-A
위의 모든 단계에서 하나의 빌드 만 트리거됩니다.
'Programing' 카테고리의 다른 글
Android : 버튼 텍스트 및 배경색 변경 (0) | 2020.12.01 |
---|---|
동일한 클래스의 다른 버전에 대한 플레이버 빌드 (0) | 2020.12.01 |
Docker 컨테이너를 중지 / 시작하지 않는 파일을 편집하는 방법 (0) | 2020.12.01 |
웹 사이트 API의 표준은 무엇입니까? (0) | 2020.12.01 |
DateTime.ToUniversalTime ()은 어떻게 작동합니까? (0) | 2020.12.01 |