如何在Gitlab pipeline中自动创建发布文档和并集成slack

在发布流程中我们经常需要查看当前的release 是否包含了别人的修改,并且我们还需要通知QA当前的这次发布是否可以上线,如果每次都手动去查看code 的commit changes ,然后找到相应的 code owner,效率太低并且有时候会遗漏,所以我们需要在Pipeline 中增加自动创建发布的文档,其中包括当前这次发布中包含的所有的待上线的commit 和相应的owner,并通知到Slack channel 中通知QA和相应的开发。

那么如何自动生成发布文档呢,首先我们发现gitlab自己携带了wiki功能,所以我们需要先在设置中enable wiki
Wiki Enable 了之后,需要在pipeline中去创建并生成,Gitlab 本身提供了一系列的API去上传相应的内容到wiki中,
当Wiki生成完之后,我们需要在Slack channel中通知大家,那么这时候需要用到Slack 的webhook url, 至于如何得到 slack 的webhook url,可以自行google下。

当解决思路都串起来之后,我们就需要实现相应的流程在pipeline中,

1,设置如下相应的变量在gitlab ci yaml 配置中

1
2
3
RELEASE_NOTE_PATH: '{your project wiki url}/-/wikis/' //gitlab 项目wiki的url
SLACK_CHANNEL_NAME: 'slack channel name' // 需要通知的channel名字
SLACK_WEBHOOK_URL: ''

2, 设置创建发布的文档job stage

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
stages:
- ...
- create-release-note
- ...

// 实现create-release-note stage
create-release-note:
stage: create-release-note
when: manual
allow_failure: true
script:
- apk add git bash
- export NOTIFICATION_HEADER="Release {Your prject name} " // 标题可以自定义
- export NOTIFICATION_MSG="- Release Note:\n${RELEASE_NOTE_PATH}" // 消息可以自定义
- file_url="{Your prject name}-release_${CI_COMMIT_TAG}" // 生成的文档的url
- LAST_VERSION=$(curl -k 'Here need get your latest released version.json' | grep 'version' | sed 's/[^0-9.]*//g')
- ./scripts/update-release-note-to-wiki.sh "v${LAST_VERSION}" "Your prject name" "Your project approver" // 上传到wiki
// 发送消息到slack channel
- ./scripts/slack-notify.sh "${SLACK_WEBHOOK_URL}" "${SLACK_CHANNEL_NAME}" "$CI_PIPELINE_URL" "$NOTIFICATION_HEADER$CI_COMMIT_TAG:\n$NOTIFICATION_MSG$file_url"

3, 发送消息到slack channel,我们可以使用shell脚本来实现,代码如下:


4, 如何上传到gitlab wiki,我们也可以使用shell 脚本来实现,代码如下:
wiki content 可以自定义