Bitbucket 到 Gitlab Webhook 触发管道

Bitbucket 到 Gitlab Webhook 触发管道

我们有以下本地场景:开发人员在 Bitbucket 上开发应用程序,运维人员在 Gitlab 上处理“Gitops”事务。我们希望通过 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

相关内容