在ConcourseCI中自动完成服务

时间:2019-03-28 16:06:10

标签: semantic-versioning concourse

我有一个ConcourseCI管道,它使用以下资源类型自动增加版本号:https://github.com/concourse/semver-resource

我的资源声明如下:

  - name: version
    type: semver
    source:
      driver: git
      initial_version: 0.0.1
      uri: {{version-repo-uri}}
      branch: {{version-repo-branch}}
      file: {{version-file}}
      private_key: {{git-key}}

我的工作看起来像这样:

- name: increment-version
    plan:
      - get: {{git-repo-name}}
        trigger: true
      - get: version
        params: {bump: patch}
      - put: version
        params: {file: version/version}

因此,正如您所看到的,现在我总是在碰补丁版本。但是,我希望管道可以根据情况增加主要,次要,补丁或RC版本的简便且自动化的方式。

是否有一个git hook或类似的东西会知道什么时候碰到什么?将semver自动化到管道中时,是否有任何实现最佳实践?我应该使用其他任何Concourse资源类型吗?还是我们绝对应该让人决定的事情?在那种情况下,如何轻松地将“手动”步骤集成到CD管道中?

我能想到的最接近的事情是在我的项目(提交给github)中有一个带有预期版本的版本文件,该文件将设置MAJOR,MINOR,PATCH编号。管道会拾取该文件,以某种方式将其用作基础,并且只会增加RC编号,但这容易出错。

要清楚,我不是在理论上问版本发行版,也不是主要,次要或补丁的含义。我在实践中问如何实施https://semver.org/中列出的建议。

1 个答案:

答案 0 :(得分:0)

我对这个问题的解决方案是标记提交,以及一个脚本,该脚本读取Git提交消息并根据内容逐步确定版本:

如果当前提交中存在版本标记:始终执行步骤PATCH。

其他:

列出所有提交,直到上一个标记为止。

  • 如果任何消息包含“ step:major”,则请执行MAJOR
  • 如果所有消息都包含“ step:patch”或“ step:micro”,则执行PATCH
  • 其他步骤轻微

这意味着如果提交者在消息中未声明任何内容,则该更改被认为是功能更改。

在构建的工件分发之前,标记并推送提交。否则,下一个版本可能会产生一个已经存在的版本。

只需根据用例修改逻辑。