
我們有以下本地部署場景:開發人員在 Bitbucket 中從事應用程式工作,維運人員在 Gitlab 中從事「Gtops」工作。我們希望透過 Gitlab 管道自動化建置和部署,並尋找實作方法。構建部分已經可以工作了。但我們想區分分支 - 並非每個分支都應該部署 - 特別是生產將手動部署。
由於 webhook 包含我嘗試在部署階段設定的分支:
only:
- dev
也
rules:
- if: '$TOKEN_BRANCH != $PROD_BRANCH'
但在這兩種方式中,部署管道仍然會被觸發。
我想到了兩個解決方法:
一種選擇是透過「提交後鉤子」鏡像 bitbucket 儲存庫 - 但一方面這個插件是有成本的,另一方面你需要第二個插件來進行鏡像 - 我能找到的唯一一個沒有維護任何插件更長。
第二個選擇是授權 Gitlab Ultimate 能夠使用“拉取鏡像”,這也可以透過 Bitbucket webhook 觸發。
由於我們沒有使用儲存庫鏡像,唯一的用例是能夠在「本機儲存庫」上使用 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」。
- 在規則中:僅當以下語句為真時才會觸發管道的這一部分。
- 由於“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