【问题标题】:GoCD pull from multiple branches and deploy to different environmentsGoCD 从多个分支拉取并部署到不同的环境
【发布时间】:2019-06-29 02:06:09
【问题描述】:

我现在正在使用 GoCD 来自动化我们的部署。

这些是我正在使用的版本。

go-agent  17.10.0-5380
go-server 17.10.0-5380

我想公开一个仅通过配置 GoCD 无法解决的案例,我找不到任何可以帮助我解决此问题的案例,很可能我遗漏了什么 ;-)

这是我想要达到的情况:

我们有一个 GIT 存储库:frontend-app

在该存储库中,每个开发人员都可以按照以下命名约定将更改推送到不同的分支:dev-1、dev-2、...

要实现的目标是,每次开发人员将更改推送到 dev-1,goCD 都会在该分支中接受这些更改,构建它并部署到我们的环境 dev-1。

如果开发人员 2 将更改推送到 dev-2,goCD 将接受这些更改、构建它们并部署到 dev-2 环境。

为了实现这一点,我尝试的第一个方法是仅使用 1 种材料配置管道,并尝试在分支名称上使用一些 glob 模式。正如您在随附的屏幕截图中所见。

但是我无法让它工作。

我尝试的第二件事是使用多种材料。为了能够拥有多种材料,您需要配置材料给它一个特定的目标目录。正如您在随附的屏幕截图中所见:

通过这种方法,我能够让 goCD 拉取新的更改并检查特定目标目录上的 repo。

对于我的管道,我在部署之前配置了一个包含大量任务的模板来构建项目,即:npm install、npm test、npm run-script build 等...

但是,这些任务随后会在父目录 (go-agent/pipelines/frontend-app/) 上执行,而不是在目标目录 (dev-1, dev-2, ...) 中执行

go-agent/pipelines/frontend-app/
  |_ dev-1
  |_ dev-2
  |_ ...

我一直在阅读有关 goCD 环境变量的信息,但找不到任何保存目标目录的变量,因此我可以在我的任务中引用它。

当然,作为一种解决方案,您始终可以创建多个管道来实现这一点,即:

frontend-app-dev-1、frontend-app-dev-2 等...

但我的问题是我有 8 个开发环境和 10 个项目。所以你可以想象,单独配置所有这些东西是一项相当艰巨的工作。

特别是如果稍后我们进行任何更改,手动完成的工作量很大并且容易出错。

所以我的问题是:

  1. 如果是第一种方法(分支 glob 模式),是否可以通过使用分支 glob 模式来实现这个目标?

  2. 如果我们使用第二种方法(几种材料),有人知道这是否可以实现吗?我想我快到了,但在配置我的任务时可能我遗漏了一些东西。

  3. 还有什么其他想法可以实现这个功能吗?

  4. 有没有其他方法可以实现我需要的东西?

提前致谢。

【问题讨论】:

    标签: go-cd


    【解决方案1】:

    每个分支确实需要一个管道。每次提交都会触发管道的一个新实例,如果您在一个管道中处理多个分支,则历史视图不会区分这些分支,并且您会在那里看到一堆断开连接的提交。

    为了减少配置开销,您可以使用 GoCD 的 pipelines as code 功能将管道作为数据结构写入 git 存储库,您可以 use templating to generate that repo。

    GoCD 团队 considers using such templates to implement wildcard branch support,但还没有完成。

    【讨论】:

      猜你喜欢
      • 2018-11-06
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 2013-01-24
      • 2015-07-29
      • 2013-01-27
      相关资源
      最近更新 更多