GoCD从多个分支机构分支并部署到不同的环境

时间:2019-06-28 10:30:39

标签: go-cd

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

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

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

我想揭开一个案例,说明我无法仅通过配置GoCD来解决问题,我找不到任何可以帮助我解决该问题的方法,很可能是我遗漏了一些;-)

这是我想要达到的情况:

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

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

要达到的目标是,每当开发人员将更改推送到dev-1时,goCD就会在该分支中进行这些更改,构建并部署到我们的环境dev-1

如果开发者2将更改推送到dev-2,goCD将接受这些更改,将其构建并部署到dev-2环境。

为达到这个目的,我首先尝试的是仅使用一种材料配置管道,并尝试在分支名称上使用一些glob模式。如您在所附的屏幕截图中所见。

configure material branch glob pattern

但是我无法正常工作。

我尝试的第二件事是使用多种材料。为了拥有多种材料,您需要配置材料,使其具有特定的Destination目录。如您在所附屏幕截图中所见:

configure multiple materials with destination directory

通过这种方法,我可以让goCD拉出新的更改并检查特定目标目录中的回购。

对于我的管道,在部署项目之前,我已经配置了带有一堆任务的模板来构建项目,例如:npm installnpm testnpm run-script build等... < / p>

但是,这些任务然后在父目录(go-agent/pipelines/frontend-app/)上执行,而不是在Destination目录(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模式),可以通过使用Branch glob模式实现此目标吗?

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

  3. 还有其他想法可以使它起作用吗?

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

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

GoCD团队considers using such templates to implement wildcard branch support,但尚未完成。