我现在正在使用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
环境。
为达到这个目的,我首先尝试的是仅使用一种材料配置管道,并尝试在分支名称上使用一些glob模式。如您在所附的屏幕截图中所见。
但是我无法正常工作。
我尝试的第二件事是使用多种材料。为了拥有多种材料,您需要配置材料,使其具有特定的Destination目录。如您在所附屏幕截图中所见:
通过这种方法,我可以让goCD拉出新的更改并检查特定目标目录中的回购。
对于我的管道,在部署项目之前,我已经配置了带有一堆任务的模板来构建项目,例如:npm install
,npm test
,npm 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个项目。正如您所想象的,单独配置所有这些东西是一项艰巨的工作。
特别是如果稍后我们进行任何更改,则需要手动进行很多工作,并且容易出错。
所以我的问题是:
如果是第一种方法(分支glob模式),可以通过使用Branch glob模式实现此目标吗?
如果我们使用第二种方法(几种材料),有人知道这是否可以实现吗?我想我快要到了,但是在配置任务时可能会丢失一些东西。
还有其他想法可以使它起作用吗?
还有其他方法可以实现我需要的东西吗?
谢谢。
答案 0 :(得分:0)
您确实需要每个分支有一条管道。每次提交都会触发一个新的管道实例,如果您在一个管道中处理多个分支,则历史视图不会区分这些分支,并且您会在这里得到一堆断开连接的提交。
为减少配置开销,您可以使用GoCD的pipelines as code功能将管道作为数据结构写入git repo,然后可以use templating to generate that repo。
GoCD团队considers using such templates to implement wildcard branch support,但尚未完成。