
우리는 다음을 가지고 있습니다온프레미스시나리오: 앱의 Bitbucket에서 작업하는 개발자, "Gitops" 작업을 위해 Gitlab에서 작업하는 Ops. 우리는 Gitlab 파이프라인을 통해 빌드 및 배포를 자동화하고 구현 방법을 찾고 싶습니다. 빌드 부분은 이미 작동합니다. 그러나 우리는 브랜치를 구별하고 싶습니다. 모든 브랜치가 배포되어야 하는 것은 아닙니다. 특히 프로덕션은 수동으로 배포됩니다.
웹훅에는 배포 단계에서 설정하려고 시도한 분기가 포함되어 있으므로 다음과 같습니다.
only:
- dev
게다가
rules:
- if: '$TOKEN_BRANCH != $PROD_BRANCH'
그러나 두 가지 방법 모두 배포 파이프라인이 여전히 트리거됩니다.
내 마음에는 두 가지 해결 방법이 떠올랐습니다.
한 가지 옵션은 "커밋 후 후크"를 통해 bitbucket 저장소를 미러링하는 것입니다. 하지만 이 플러그인에는 비용이 들고 다른 한편으로는 미러링을 위한 두 번째 플러그인이 필요합니다. 제가 찾을 수 있는 유일한 플러그인은 유지 관리되지 않습니다. 더 길게.
두 번째 옵션은 Bitbucket 웹훅을 통해 트리거될 수도 있는 "풀 미러링"을 사용할 수 있도록 Gitlab Ultimate에 라이선스를 부여하는 것입니다.
우리는 리포지토리 미러링을 사용하지 않으며 유일한 사용 사례는 배포용 브랜치를 다르게 하는 위의 모든 방법이 작동하는 "로컬 리포지토리"에서 Gitlab 파이프라인을 사용할 수 있는 것이므로 이미 사용 가능한 리소스를 사용하는 방법입니다.
이에 대한 귀하의 생각을 듣게 되어 기쁩니다!
편집하다: 파이프라인의 일부:
variables:
PROD_BRANCH: main
before_script:
- TOKEN_BRANCH=$(cat $TRIGGER_PAYLOAD | jq -r '.changes[0].ref.displayId')
deploy:
stage: deploy
tags:
- openshift
rules:
- if: $TOKEN_BRANCH != $PROD_BRANCH
- echo $TOKEN_BRANCH는 "main"을 반환합니다.
- 규칙: 파이프라인의 이 부분은 다음 문이 true인 경우에만 트리거됩니다.
- "main == main"이고 "!="가 아니기 때문에 파이프라인의 "배포" 단계는 실행되어서는 안 됩니다. 하지만 그것은...
여러 변종
rules:
- if: '$TOKEN_BRANCH !~ $PROD_BRANCH'
rules:
- if: '$TOKEN_BRANCH =~ $PROD_BRANCH'
when: never
이러한 경우 반대 현상이 발생합니다. 파이프라인에는 배포 단계가 없으며 Gitlab의 "파이프라인" 보기에도 단계가 표시되지 않습니다.
답변1
작동하는 솔루션을 찾았습니다.
"규칙"이 작동하지 않은 후에는 이제 배포 단계의 스크립트 부분에서 "if 루프"를 사용합니다. 따라서 배포 단계는 매번 트리거되지만 논리(= 배포)는 토큰에 해당 단계가 포함된 경우에만 수행됩니다.
deploy-to-test:
stage: deploy
variables:
PROD: master
tags:
- openshift
script:
- >
if [ "$TOKEN_BRANCH" != "$PROD" ]; then
---logic---
else
echo "skipping ..."
fi