2026-04-24T05:49:36.472ZJenkinsGitlabDevops
搭建 Android Gitlab 多分支,动态参数自动化流程
Android 自动化流程
方案概述 实现GitLab、Jenkins、DevOps Service与飞书机器人的无缝集成,以支持多分支、多构建参数的持续集成与持续部署(CI/CD)流程。自动化构建和部署过程,并通过飞书机器人及时获取构建与部署状态。
工具栈
- 代码库: GitLab
- 持续集成:Jenkins + Gitlab Runner
- DevOps服务:DevOpService API
- 消息通知:飞书机器人
流程架构
Tips: commit信息需规范提交,格式:[变体] 更新xxxx环境准备
Jenkins必要插件:
- Pipeline Plugin
- Generic Webhook Trigger
- HTTP Request Plugin(用于与DevOpService集成,可选插件,请求方式有很多)
- 搭建 GitLab Runner https://gitlab.cn/docs/runner/install/
- 配置 Runner

获取注册密钥

在部署的Gitlab Runner 服务器上面注册服务

配置参数:
- Gitlab 域名:https://gitlab.demo.cn
- 运行器名称:默认即可,直接回车
- 使用的引擎:docker
- 默认镜像:curlimages/curl:latest

注册成功后,Gitlab Runner 会新增一个运行器(test)

- Gitlab Runner 流水线逻辑
variables:
APP_VERSION: "1.0.0"
stages:
- trigger_jenkins
- notify
trigger_jenkins_job:
stage: trigger_jenkins
image: curl:latest
script:
- |
echo "Git branch: $CI_COMMIT_REF_NAME"
echo "Commit message: $CI_COMMIT_MESSAGE"
# 从commit message提取[MATRIX]
extracted_matrix=$(echo "$CI_COMMIT_MESSAGE" | sed -n 's/^$$\([^]]*\)$$.*/\1/p')
if [[ -z "$extracted_matrix" ]]; then
echo "未提取到 MATRIX 参数,跳过 Jenkins 触发任务,作业中止。"
exit 0
fi
if [[ -n "$extracted_matrix" ]]; then
MATRIX="$extracted_matrix"
fi
echo "Using MATRIX = $MATRIX"
cat > payload.json << EOF
{
"ref": "refs/heads/$CI_COMMIT_REF_NAME",
"parameters": {
"BRANCH": "$CI_COMMIT_REF_NAME",
"MATRIX": "$MATRIX",
"FeishuRobot": "$Robot"
}
}
EOF
curl -X POST "https://$JENKINS_DOMAIN/generic-webhook-trigger/invoke?token=$JENKINS_TOKEN" \
-H "Content-Type: application/json" \
-d @payload.json
notify_feishu_job:
stage: notify
image: ubuntu:20.04
script:
- |
# 1. 登录获取 access_token
LOGIN_RESPONSE=$(curl --silent --location --request POST 'https://$DEVOPS_DOMAIN/ums/v1/user/login' \
--header 'Content-Type: application/json' \
--data-raw "{
\"email\": \"$LOGIN_EMAIL\",
\"password\": \"$LOGIN_PASSWORD\"
}")
# 2. 解析 access_token
ACCESS_TOKEN=$(echo "$LOGIN_RESPONSE" | jq -r '.access_token')
if [ -z "$ACCESS_TOKEN" ]; then
echo "获取access_token失败,退出"
exit 1
fi
echo "成功获取access_token"
# 3. 组装通知消息
TITLE="Gitlab作业失败通知 - $CI_PROJECT_NAME"
CONTENT="流水线ID: $CI_PIPELINE_ID\n分支: $CI_COMMIT_REF_NAME\n作业: Gitlab流水线失败!"
COMMIT_INFO="$CI_COMMIT_MESSAGE"
SUBMITTER="$GITLAB_USER_NAME"
# 组装JSON请求体
cat > notify_payload.json << EOF
{
"title": "$TITLE",
"content": "$CONTENT",
"commit_info": "$COMMIT_INFO",
"submitter": "$SUBMITTER",
"scan_result_link": "",
"webhook_url": "$FEISHU_WEBHOOK_URL",
"webhook_secret": "$FEISHU_WEBHOOK_SECRET"
}
EOF
# 发送请求
curl --location --request POST 'https://$DEVOPS_DOMAIN/ims/v1/aliyun/feishu/notify' \
--header 'Content-Type: application/json' \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--data-binary @notify_payload.json
when: on_failure
allow_failure: false
Tips: 固定参数都写进Gitlab系统变量,可维护性高,不用改yml配置
- 当提交/合并代码,Runner运行器会自动获取相关参数提交给Jenkins任务
