Bitbucket 到 Gitlab Webhook 來觸發管道

Bitbucket 到 Gitlab Webhook 來觸發管道

我們有以下本地部署場景:開發人員在 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

相關內容