9

我有几个项目,我想在单独的构建配置中拥有稍微不同的配置:

  • VCS 源和构建触发器(即唯一的区别是使用项目根目录的哪个子目录)
  • 构建步骤(前几个完全相同,但最后几个可能会根据单元测试的运行方式、依赖关系等而有所不同)

而已。我查看了构建配置模板,但似乎不允许灵活地指定自定义构建步骤额外的 VCS 根。

真的,我只是希望不必手动将(几个)构建步骤从我们初始项目的构建配置复制到更多配置中,并且在事情发生变化时必须维护它们。似乎应该有更好的解决方案?

4

2 回答 2

3

我也想知道这一点,但是我在网上找到的一些建议您倾向于冗余,而不是尝试在多个分支或项目中重用一个配置。

然而,所有这些都是在版本 8 发布之前,它引入了提取元运行器的能力

他们在 2013 年 4 月 13 日发布的博客很好地总结了它们是什么以及它们与模板的不同之处。

元跑者

Meta Runner 是一项强大的功能,为自定义 TeamCity 并使其更加以人为本,提供了一种很有前途的新方法。为了理解它,让我们考虑一个例子。

想象一下,您在不同的构建配置中一遍又一遍地使用了一些重复的任务。任务被定义为一个或多个构建步骤,基于内置的运行程序,如 Ant 或命令行。您很可能希望在多个构建配置中轻松重用此任务。您不能使用模板执行此操作,因为模板强制您在不同的配置之间共享相同的设置,这并不总是可能的。我们提出的一个解决方案是从这些步骤中提取 Meta-runner,在发行说明中查看它是如何工作的。

我还没有实现这个,但我很快就会测试它。这让我认为您应该能够将存储库作为参数传递,但我不确定。

于 2013-07-11T00:51:54.083 回答
0

我已经为此苦苦挣扎了一段时间,并开发了一个工具来管理它,我称之为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
于 2020-05-09T05:22:38.683 回答