通过实现自动化流程可以减少人工介入和手动干预,从而实现更高效的流程。审批通过后,Jenkins 自动化发布可以自动触发构建和部署过程,减少人工错误和延迟,将结果实时推送群通知提高沟通效率。
需要创建一个审批流程通过钉钉的审批应用或飞书的审批功能来实现。在流程中添加适当的字段来收集用户输入的数据,如代码版本、部署环境等信息
钉钉和飞书提供了审批结果的回调机制需要创建一个接收回调的服务
收到审批结果回调后,根据审批结果将触发 Jenkins 的自动化发布
Lark PC或APP端通过「工作台」-「审批」查找
飞书&Lark PC或APP端:「工作台」-「审批中心」-「管理后台」
保存 approval_code id 订阅审批事件时需要
开发者后台 - 创建应用
https://open.larksuite.com/app
应用订阅 approval_code 后,该应用就可以收到该审批定义对应实例的事件通知。同一应用只需要订阅一次,无需重复订阅。 当应用不希望再收到审批事件时,可以使用取消订阅接口进行取消,取消后将不再给应用推送消息。
Subscribe to approval events - Server Docs - Documentation - Lark Developer
source /etc/profile
tag=`date "+%Y%m%d%H%M"` && echo Date:"$tag" # 获取Tag日期 tag=202308032124
namespace=${JOB_BASE_NAME%%-*} # 拼接命名空间 bos-server => bos
# 打包
cd ${WORKSPACE} && pwd
mvn clean package
# 构建镜像
docker build -t harbor.test.cc/pro/${JOB_BASE_NAME}:${tag} -f Dockerfile . # 构建镜像
docker push harbor.test.cc/pro/${JOB_BASE_NAME}:${tag} # 推送新镜像到仓库
# Kuboard api基于镜像版本发布
curl -X PUT \
-H "content-type: application/json" \
-H "Cookie: KuboardUsername=admin; KuboardAccessKey=kkcrdrhk4j2p.xxxxx" \
-d '{"kind":"deployments","namespace":"'$namespace'","name":"'${JOB_BASE_NAME}'","images":{"harbor.test.cc/pro/'${JOB_BASE_NAME}'":"harbor.test.cc/pro/'${JOB_BASE_NAME}:${tag}'"}}' \
"http://kuboard.test.cc/kuboard-api/cluster/pro-eks-serverless/kind/CICDApi/logan/resource/updateImageTag"
#!/bin/bash
webhookURL=https://open.larksuite.com/open-apis/bot/v2/hook/xxxxxxxxx(发布变更群)
getBuildState(){
buildNr=$1
curl -u jenkins:xxxxxx ${JOB_URL}/${buildNr}/api/json |grep -Po '"result":\s*"\K\w+'
}
state=$(getBuildState ${BUILD_NUMBER} )
nowTime=$(date "+%Y-%m-%d %H:%M:%S")
echo ${state}
if [[ "x${state}" == "xSUCCESS" ]] ; then
curl -X POST -H "Content-Type: application/json" \
-d '{"msg_type":"post","content": {"post": {"zh_cn": {"title": "发布结果通知","content": [[{"tag": "text","text": "'"应用: $JOB_BASE_NAME\n分支: $SELECT\n构建: $BUILD_DISPLAY_NAME\n状态: 成功\n日期: $nowTime "'"}]]} } }}' \
$webhookURL
else
curl -X POST -H "Content-Type: application/json" \
-d '{"msg_type":"text","content":{"text":"'"应用: $JOB_BASE_NAME\n分支: $SELECT\n状态: 失败\n日期: $nowTime\nURL: $JOB_URL "'"}}' \
$webhookURL
fi