删除分支时在gitlab上运行管道

问题描述 投票:0回答:4

删除分支后是否可以通过 Gitlab CI/CD 运行管道。

事实上,我想在删除该分支后编辑文件。

例如,我有两个存储库,R1 和 R2。

在 R1 中我有 2 个分支

  • B1
  • B2

当 B1(R1 的分支)被删除时,我想从 R2 编辑文件。

我知道如何访问和编辑文件,但我不知道如何为已删除的分支设置触发器。

bash gitlab yaml gitlab-ci gitlab-ci-runner
4个回答
2
投票

您可以使用环境。查看停止环境

当关联分支被删除时,GitLab 将自动触发停止操作。 stop_review 作业必须与deploy_review 作业处于同一阶段,以便环境自动停止。

deploy_review:
  stage: deploy
  script:
    - echo "Deploy a review app"
  environment:
    name: review/$CI_COMMIT_REF_NAME
    url: https://$CI_ENVIRONMENT_SLUG.example.com
    on_stop: stop_review
  only:
    - branches
  except:
    - master

stop_review:
  stage: deploy
  variables:
    GIT_STRATEGY: none
  script:
    - echo "Implement editing files from R2 here"
  when: manual
  environment:
    name: review/$CI_COMMIT_REF_NAME
    action: stop

这并不完全是您想要的,但也许对您更有用。


2
投票

@Novikov 的答案正是您所需要的,我一开始也以为它只能手动工作,但它会自动工作。我添加了一些他的答案中没有的精确性。

我有一个和你类似的实用程序。

  • Repo-1 包含应用程序代码。
  • Repo-2 包含用于部署/销毁应用程序基础设施的 terraform 代码。

Repo-1 管道触发我的 repo-2 上的管道,该管道将部署应用程序,因此我的需要是删除 repo-1 中的分支会触发 repo-2 管道删除环境。

所以我使用了

environment
功能,gitlab文档解释了如何使用它。

deploy:
  stage: deploy
  script:
    - {...}
  environment:
    name: deployment-${CI_COMMIT_BRANCH}
    on_stop: destroy

destroy:
  stage: deploy
  variables:
    GIT_STRATEGY: none
  script:
    - {...}
  environment: 
    name: deployment-${CI_COMMIT_BRANCH}
    action: stop
  when: manual

重要

  • 我知道我们使用
    when: manual
    ,但是当 分支被删除/合并。
  • 两个作业(部署 - 销毁)需要有相同的阶段。
  • GIT_STRATEGY 变量需要设置为 none,否则它将尝试从不再存在的分支中获取存储库,并且作业将失败。
  • 使用动态变量作为环境名称 否则不行,每个环境必须有自己的名字。
  • 同样重要的是要明确
    environment
    功能不 使用
    trigger
    功能,因此如果您想触发另一个管道,您需要使用 API。

来源: Gitlab 文档


0
投票

管道不可能知道您何时通过 UI 或通过

git branch -r -D
删除了分支。管道作为 gitlab 服务器上的提交挂钩运行(当您推送时),以及当您在 UI 中手动单击“运行管道”按钮时。

话虽如此,可以从管道作业中删除分支,因此虽然我将由您决定如何执行此操作,但您可以添加一个使用 trigger

 关键字的作业在 R1 管道中的作业删除分支后触发 R2 中的管道。

请参阅触发器文档:

https://docs.gitlab.com/ee/ci/yaml/index.html#trigger 并查看多项目管道。

因此,在 R2 中,您有一个设置为编辑某些文件的管道 在 R1 中,您将设置一个删除 B1 分支的作业,并在该作业之后执行一个在 R1 中运行的“触发作业”,并向 Gitlab API 发送命令以启动 R2 中的管道。


0
投票
使用上面建议的环境,删除的分支名称在脚本中是否可用?因为我必须执行一些与已删除分支相关的清理操作。

© www.soinside.com 2019 - 2024. All rights reserved.