From 1f0718667994e0345088d9a156dbc6d165d68844 Mon Sep 17 00:00:00 2001 From: MiFaZhan Date: Fri, 30 Oct 2026 09:39:19 +0800 Subject: [PATCH] =?UTF-8?q?ci:=20=E6=89=93=20tag=20=E6=97=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=A7=A6=E5=8F=91=20Jenkins=20=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 .gitea/workflows/trigger-jenkins.yml: - 触发时机:推送 v* tag(main 日常提交不触发),也可手动 dispatch - 动作:调用 Jenkins 任务 iotlcm-oss-build,参数 SERVICES=<仓库名>、VERSION= - 凭据来自组织密钥 JENKINS_URL / JENKINS_USER / JENKINS_API_TOKEN - 同一 ref 连续推送时取消旧任务 --- .gitea/workflows/trigger-jenkins.yml | 74 ++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 .gitea/workflows/trigger-jenkins.yml diff --git a/.gitea/workflows/trigger-jenkins.yml b/.gitea/workflows/trigger-jenkins.yml new file mode 100644 index 0000000..0731f23 --- /dev/null +++ b/.gitea/workflows/trigger-jenkins.yml @@ -0,0 +1,74 @@ +name: trigger-jenkins-oss + +# 打 tag 时触发 Jenkins 构建开源镜像并推送到镜像仓库。 +# 仅在 tag 推送时触发;main 分支的日常提交不触发。 +on: + push: + tags: + - 'v*' + workflow_dispatch: + +# 同一 ref 连续触发时取消旧任务,只跑最新的 +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + +jobs: + trigger: + runs-on: host + steps: + - name: 触发 Jenkins 镜像构建 + env: + JU: ${{ secrets.JENKINS_USER }} + JT: ${{ secrets.JENKINS_API_TOKEN }} + JURL: ${{ secrets.JENKINS_URL }} + REPO_NAME: ${{ github.event.repository.name }} + TAG_NAME: ${{ github.ref_name }} + run: | + set -eu + + # 只有 tag 推送才构建;手动触发时按 tag 取,没有就退出 + case "${GITHUB_REF:-}" in + refs/tags/v*) ;; + *) + if [ "${GITHUB_EVENT_NAME:-}" != "workflow_dispatch" ]; then + echo "非 tag 推送,跳过:${GITHUB_REF:-unknown}" + exit 0 + fi + ;; + esac + + if [ -z "${TAG_NAME:-}" ]; then + echo "未取到 tag 名,退出" + exit 1 + fi + + echo "仓库:$REPO_NAME 版本:$TAG_NAME" + + WORK=$(mktemp -d) + trap 'rm -rf "$WORK"' EXIT + + # 取 CSRF crumb + curl -s -c "$WORK/cj" -u "$JU:$JT" "$JURL/crumbIssuer/api/json" -o "$WORK/crumb.json" + CR=$(python3 -c "import json;print(json.load(open('$WORK/crumb.json'))['crumb'])") + + # 触发参数化任务:SERVICES=仓库名,VERSION=tag + code=$(curl -s -o "$WORK/out" -w '%{http_code}' -X POST -b "$WORK/cj" -u "$JU:$JT" \ + -H "Jenkins-Crumb: $CR" \ + --data-urlencode "SERVICES=$REPO_NAME" \ + --data-urlencode "VERSION=$TAG_NAME" \ + --data-urlencode "FORCE=true" \ + "$JURL/job/iotlcm-oss-build/buildWithParameters") + + echo "Jenkins 触发 HTTP $code" + if [ "$code" != "201" ] && [ "$code" != "200" ] && [ "$code" != "302" ] && [ "$code" != "303" ]; then + echo "触发失败:" + cat "$WORK/out" + exit 1 + fi + + LINK="$JURL/job/iotlcm-oss-build/" + echo "==========================================" + echo "Jenkins 构建:$LINK" + echo "==========================================" + echo "::notice title=Jenkins 镜像构建::[$LINK]($LINK)"