【发布时间】: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 个项目。所以你可以想象,单独配置所有这些东西是一项相当艰巨的工作。
特别是如果稍后我们进行任何更改,手动完成的工作量很大并且容易出错。
所以我的问题是:
如果是第一种方法(分支 glob 模式),是否可以通过使用分支 glob 模式来实现这个目标?
如果我们使用第二种方法(几种材料),有人知道这是否可以实现吗?我想我快到了,但在配置我的任务时可能我遗漏了一些东西。
还有什么其他想法可以实现这个功能吗?
有没有其他方法可以实现我需要的东西?
提前致谢。
【问题讨论】:
标签: go-cd