如何减少类似构建配置的重复?

问题描述 投票:9回答:2

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

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

就是这样。我研究了构建配置模板,但似乎不能灵活地指定自定义构建步骤额外的VCS根目录。

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

teamcity
2个回答
3
投票

我也想知道这一点,但是我在网上找到的信息表明您更喜欢冗余,而不是尝试在多个分支或项目中重用一种配置。

但是,所有这些都是在版本8发行之前,它引入了提取meta-runner的功能

他们的博客from April 13, 2013提供了有关它们是什么以及它们与模板的区​​别的很好的摘要。

元运行器

Meta Runner是一项强大的功能,为自定义TeamCity并使它变得更加面向人提供了一种有希望的新方法。要理解它,我们来看一个例子。

想象一下,您在不同的构建配置中反复使用了一些重复的任务。该任务被定义为一个或多个基于内置运行程序(例如Ant或命令行)的构建步骤。您很可能希望在多个构建配置中轻松地重用此任务。您无法使用模板执行此操作,因为模板会强制您在不同的配置之间共享相同的设置,而这并非总是可能的。我们建议的解决方案是从这些步骤中提取Meta-runner,请参阅发行说明中的​​内容。

我还没有实现,但是我将很快对其进行测试。它使我认为您应该可以将存储库作为参数传递,但我不确定。


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
© www.soinside.com 2019 - 2024. All rights reserved.