Programing

Travis-CI를 구성하여 풀 리퀘스트를 빌드하고 중복없이 마스터에 병합하는 방법

lottogame 2020. 12. 1. 07:34
반응형

Travis-CI를 구성하여 풀 리퀘스트를 빌드하고 중복없이 마스터에 병합하는 방법


"BDD"용어로 넣으려면 :

배경 :
내가 GH 저장소에 기여하고 있다는 점을 감안할 때

풀 리퀘스트를 생성하면
Travis가 최신 커밋을 빌드해야합니다.

기존 풀 리퀘스트에 푸시하면
Travis가 최신 커밋을 빌드해야합니다.

풀 리퀘스트를 마스터에 병합하면
Travis는 마스터를 빌드해야합니다.

Travis-CI의 "빌드 푸시"및 "빌드 PR"설정에 혼란 스러웠습니다.

  • 둘 다 활성화하면 Travis가 각 Pull Request를 두 번 빌드합니다.
    • 해당 분기에 대한 커밋에 한 번
    • 해당 분기의 병합 커밋을 대상으로 다시 한 번
  • "빌드 PR"만 활성화하면 PR이 빌드되지만 병합 후 빌드가 생성되지는 않습니다 (예 : 마스터에서).
  • "푸시"무차별 대입을 활성화 하면 저장소에 대한 모든 푸시를 구축하여 위의 기준을 충족합니다 . 화이트리스트와 블랙리스트 브랜치를 통해 문제를 해결하려고 할 수 있지만 브랜치 이름을 엄격하게 훈련하지 않는 한 그것은 아마도 당신을 물릴 것입니다.

이것은 Travis-CI 문서GH 문제 # 3241에 자세히 설명되어 있습니다.

위의 기준을 충족하는 구성을 아는 사람이 있습니까?


결국 PR과 푸시를 모두 활성화하는 아이디어를 얻었지만 특정 브랜치에 대한 푸시를 제한하는 화이트리스트가있는 또 다른 GH 문제 ( # 2111 )를 발견했습니다 . 이것은 내 워크 플로의 기준을 충족하는 것 같습니다. 내가 한 일은 다음과 같습니다.

  1. 저장소에 대한 Travis 설정에서 PR 및 분기 푸시를 모두 활성화합니다.

트래비스 푸시 / 홍보 설정 활성화

  1. 변경 .travis.yml에 대한 화이트리스트 master지점 (즉, 유일한 마스터에 푸시를 구축)
가지 :
  뿐: 
    -마스터
  1. 변경 사항이 있는 PR을.travis.yml 만들고 일부 빈 커밋이있는 다른 PR 을 만들어 포크에서도 작동 하는지 확인하여 테스트합니다 .

  2. 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,이 분기에 대한 모든 커밋은 빌드를 트리거합니다.
  • 브랜치를 병합 할 준비가되면 masterfrom wip.feature-Ato의 이름을 바꾸고 pr.feature-Apull request를 열 수 있습니다.
  • 풀 리퀘스트를 검토하는 동안 새로운 수정 사항을 적용하려면 pr.feature-A

위의 모든 단계에서 하나의 빌드 만 트리거됩니다.

참고 URL : https://stackoverflow.com/questions/31882306/how-to-configure-travis-ci-to-build-pull-requests-merges-to-master-wo-redunda

반응형