我有几个项目,我想在单独的构建配置中拥有稍微不同的配置:
- VCS 源和构建触发器(即唯一的区别是使用项目根目录的哪个子目录)
- 构建步骤(前几个完全相同,但最后几个可能会根据单元测试的运行方式、依赖关系等而有所不同)
而已。我查看了构建配置模板,但似乎不允许灵活地指定自定义构建步骤或额外的 VCS 根。
真的,我只是希望不必手动将(几个)构建步骤从我们初始项目的构建配置复制到更多配置中,并且在事情发生变化时必须维护它们。似乎应该有更好的解决方案?
我有几个项目,我想在单独的构建配置中拥有稍微不同的配置:
而已。我查看了构建配置模板,但似乎不允许灵活地指定自定义构建步骤或额外的 VCS 根。
真的,我只是希望不必手动将(几个)构建步骤从我们初始项目的构建配置复制到更多配置中,并且在事情发生变化时必须维护它们。似乎应该有更好的解决方案?
我也想知道这一点,但是我在网上找到的一些建议您倾向于冗余,而不是尝试在多个分支或项目中重用一个配置。
然而,所有这些都是在版本 8 发布之前,它引入了提取元运行器的能力
他们在 2013 年 4 月 13 日发布的博客很好地总结了它们是什么以及它们与模板的不同之处。
元跑者
Meta Runner 是一项强大的功能,为自定义 TeamCity 并使其更加以人为本,提供了一种很有前途的新方法。为了理解它,让我们考虑一个例子。
想象一下,您在不同的构建配置中一遍又一遍地使用了一些重复的任务。任务被定义为一个或多个构建步骤,基于内置的运行程序,如 Ant 或命令行。您很可能希望在多个构建配置中轻松重用此任务。您不能使用模板执行此操作,因为模板强制您在不同的配置之间共享相同的设置,这并不总是可能的。我们提出的一个解决方案是从这些步骤中提取 Meta-runner,在发行说明中查看它是如何工作的。
我还没有实现这个,但我很快就会测试它。这让我认为您应该能够将存储库作为参数传递,但我不确定。
我已经为此苦苦挣扎了一段时间,并开发了一个工具来管理它,我称之为Dictator Builder。
长期以来,我们一直在使用“模板”项目。基本上,它是一个存储库,其中包含一个完整的工作应用程序,其中包含所需的所有构建配置。就像react-boilerplate一样。我们有几个模板项目,一个用于我们开发的每种类型的应用程序。
这样做的问题是使复制的代码与模板项目保持同步。
我现在将模板代码打包在“独裁者”中。像这样: https ://github.com/tomasbjerre/dictator-react-boilerplate/tree/master/dictatables/static-files/react-boilerplate
独裁者要求将一些静态文件复制到指定文件夹的根目录。
{
"message": "Copy react-boilerplate",
"actions": [
{
"copyFrom": "react-boilerplate",
"target": "."
}
]
}
独裁者可以从命令行运行,例如npx dictator-react-boilerplate@version
. 它将指示当前的工作目录,通常是应用程序中的代码库。它可以由.dictatorconfig.json文件中的代码库配置。也许选择不被某些部分支配:
{
"ignore": [
"/app",
"/package.json",
"/package-lock.json",
"/Changelod.md"
]
}
这样模板中的大部分构建配置就被复制到指定的代码库中。文件夹和app
其他东西仍然由代码库管理。
克隆后,文件夹如下所示:
app
coverage
.dictatorconfig.json
docs
.gitignore
internals
LICENSE.md
node_modules
package.json
README.md
server
之后npm install
,或之后npx dictator-react-boilerplate@version
看起来像:
.all-contributorsrc
app
appveyor.yml
babel.config.js
Changelog.md
CODE_OF_CONDUCT.md
CONTRIBUTING.md
coverage
.dictatorconfig.json
docs
.editorconfig
.eslintrc.js
.gitattributes
.gitignore
internals
jest.config.js
LICENSE.md
node_modules
.nvmrc
package.json
package-lock.json
.prettierignore
.prettierrc
README.md
server
.stylelintrc
.travis.yml