1

当用户将代码提交到 git 存储库时,我们需要自动生成提交历史文件。

可以使用 Jenkins、Gitlab Webhooks 和 Jenkins Git Changelog 插件来完成。此外,它可以使用下面的 git 命令创建。

$ git log --pretty=format:'At %ci, %cN committed %h : %s' --decorate --graph >log.log

但是,无论如何我们可以使用 Gitlab CI/CD 操作生成提交历史文件。该文件可以保存在 git 存储库或本地存储中。

样本提交历史文件

* At 2018-11-16 18:02:21, kRiZ committed 1714a95 : Commit 4
* At 2018-11-15 16:06:06, kRiZ committed bab5c0c : Commit 3
* At 2018-11-14 18:05:09, kRiZ committed b3c9d86 : Commit 2
* At 2018-11-14 06:47:34, kRiZ committed 8e6ee30 : Add README.md
4

2 回答 2

2

我确信在 GitLab 中有多种方法可以做到这一点。这是一个:

  1. .gitlab-ci.yaml在存储库的根目录中创建一个文件。您可以在本地执行此操作,也可以使用 GitLab 的 Web UI。
  2. 将此代码段粘贴到您的.gitlab-ci.yaml文件中:

    changelog:
      image: docker:git
      script:
        - git log --pretty=format:'At %ci, %cN committed %h - %s' --decorate --graph >log.log
      artifacts:
        paths: [log.log]
    
  3. 要么在本地提交和推送,要么在 GitLab 的 Web UI 上提交。作业将changelog被触发。

  4. 作业成功完成后,您的log.log文件将作为changelog作业的工件可用

本质上,通过这个片段,您将 GitLab 的 CI/CD 系统设置为:

  • Docker 执行器与git预安装的 Docker 映像一起使用
  • 定义一个将运行你的 git 命令的changelog 作业
  • 定义将作为作业的一部分生成并存储的log.log 工件,以便您以后可以下载它。

我还建议查看GitLab CI/CD 快速入门

于 2018-12-26T10:10:23.470 回答
1

Jenkins 插件使用的还有一个命令行工具,可以在任何地方使用:

npx git-changelog-command-line -std -tec "
# Changelog

Changelog for {{ownerName}} {{repoName}}.

{{#tags}}
## {{name}}
 {{#issues}}
  {{#hasIssue}}
   {{#hasLink}}
### {{name}} [{{issue}}]({{link}}) {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
   {{^hasLink}}
### {{name}} {{issue}} {{title}} {{#hasIssueType}} *{{issueType}}* {{/hasIssueType}} {{#hasLabels}} {{#labels}} *{{.}}* {{/labels}} {{/hasLabels}}
   {{/hasLink}}
  {{/hasIssue}}
  {{^hasIssue}}
### {{name}}
  {{/hasIssue}}

  {{#commits}}
**{{{messageTitle}}}**

{{#messageBodyItems}}
 * {{.}} 
{{/messageBodyItems}}

[{{hash}}](https://github.com/{{ownerName}}/{{repoName}}/commit/{{hash}}) {{authorName}} *{{commitTime}}*

  {{/commits}}

 {{/issues}}
{{/tags}}
"
于 2019-05-30T14:06:11.690 回答