avatar

Ryan's Blog

The first step is always the hardest.

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
  • 工具
Home Jenkins 基于 GitLab 分支与 Tag 的自动化打包发布实践
文章

Jenkins 基于 GitLab 分支与 Tag 的自动化打包发布实践

Posted 2022-01-12 Updated 4 days ago
By Ryan Chen
11~14 min read

Jenkins 自动化打包的核心目标,是让代码从 GitLab 分支或 Tag 进入一条可重复、可追踪、可回滚的构建流程。

这篇文章从 Freestyle 操作升级为 Jenkinsfile / Pipeline 思路,整理分支构建、Tag 构建、参数化构建、制品归档和发布注意事项。

CI/CD 系列文章

本文属于 Jenkins + GitLab + SonarQube CI/CD 系列,相关内容可以继续阅读:

  • Git 提交规范实践:Conventional Commits、Commitizen 与 CHANGELOG 自动生成
  • GitLab Docker 部署与 Personal Access Token 配置指南
  • Jenkins 安装部署与 JDK、Maven、Agent 构建环境配置
  • GitLab Webhook 触发 Jenkins Pipeline:Push、Tag 与 Merge Request 自动构建
  • Jenkins 基于 GitLab 分支与 Tag 的自动化打包发布实践
  • Jenkins 集成 SonarQube:代码扫描、质量门禁与 Pipeline 实践
  • SonarQube Docker 部署与 Java 项目静态代码分析指南
  • SonarQube for IDE 使用指南:IntelliJ 安装、Connected Mode 与规则同步
  • SonarQube LTA 升级与数据库迁移指南:从旧版本到 8.9/9.9/2025 LTA

分支构建与 Tag 构建

类型 适用场景
分支构建 开发、测试、集成环境
Tag 构建 正式发布、可回滚版本
参数化构建 手动选择分支、Tag、环境

建议:

  • 测试环境可以按分支构建。
  • 生产发布优先按 Tag 构建。
  • 每次发布保留构建日志和制品。

Jenkinsfile 示例

pipeline {
  agent any

  tools {
    jdk 'jdk17'
    maven 'maven-3.9'
  }

  parameters {
    string(name: 'GIT_REF', defaultValue: 'main', description: '分支或 Tag')
  }

  stages {
    stage('Checkout') {
      steps {
        checkout scm
        sh 'git checkout ${GIT_REF}'
      }
    }

    stage('Build') {
      steps {
        sh 'mvn -B clean package -DskipTests'
      }
    }

    stage('Archive') {
      steps {
        archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
      }
    }
  }
}

使用 Git Tag 发布

创建 Tag:

git tag -a v1.2.0 -m "release v1.2.0"
git push origin v1.2.0

Jenkins 可以通过 Tag Webhook 触发,也可以手动选择 Tag 构建。

Maven 构建参数

常见命令:

mvn -B clean package -DskipTests

如果是生产发布,不建议默认跳过测试。更推荐:

mvn -B clean verify

根据团队情况区分:

  • 快速测试环境:可跳过部分慢测试。
  • 生产发布:应执行单元测试、质量扫描和必要集成测试。

制品归档

Jenkins 中要归档:

  • JAR / WAR。
  • 构建日志。
  • 测试报告。
  • SonarQube 扫描结果链接。
  • 版本号和 Git Commit ID。

示例:

archiveArtifacts artifacts: 'target/*.jar', fingerprint: true
junit 'target/surefire-reports/*.xml'

发布注意事项

  • 不要从未打 Tag 的临时代码发布生产。
  • 构建参数要记录在 Jenkins Build 中。
  • 发布制品要能追溯 Git Commit。
  • 密码、Token、服务器密钥必须使用 Jenkins Credentials。
  • 发布失败要有回滚方案。

常见问题

1. 拉不到 Tag

检查 Git refspec 是否包含 tags。

git fetch --tags

2. 构建版本号不一致

建议将 Tag 或 Commit ID 写入制品元数据,例如 build-info.properties。

3. 同一个 Job 被重复触发

检查 GitLab Webhook 事件是否同时勾选 Push 和 Tag,并在 Jenkins 中增加触发条件过滤。

参考资料

  • Jenkins Pipeline
  • Jenkins 使用凭据
  • GitLab Webhooks
指南
Jenkins GitLab Tag Pipeline Jenkinsfile 自动化部署 CI/CD
License:  CC BY 4.0
Share

Further Reading

Jun 27, 2026

Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分

本文整理一套适合 Router Agent + Skill + Runtime 架构的设计原则:Agent 只负责业务决策,Runtime 统一负责执行、恢复、Trace、Checkpoint 和 Evidence,Business Script 只做确定性业务执行。

Sep 9, 2024

Redis 核心概念、数据结构与高可用架构详解

系统梳理 Redis 的核心数据类型、底层结构、过期与淘汰、持久化、事务、主从复制、Sentinel、Cluster、缓存一致性和分布式锁等机制,适合作为 Redis 学习、面试复习和高可用架构设计参考。

Sep 5, 2024

B+树原理与 MySQL InnoDB 索引机制解析

本文从 B+ 树的多叉平衡结构、叶子节点链表、范围查询和磁盘 I/O 特性出发,解释数据库索引为什么常采用 B+ 树,并结合 MySQL InnoDB 的聚簇索引、二级索引、回表、覆盖索引和联合索引机制理解其实际应用。

OLDER

Jenkins 集成 SonarQube:代码扫描、质量门禁与 Pipeline 实践

NEWER

GitLab Webhook 触发 Jenkins Pipeline:Push、Tag 与 Merge Request 自动构建

Recently Updated

  • Agent 架构设计原则:Router、Runtime 与 Business Script 的职责划分
  • RocketMQ 架构设计与应用最佳实践:高可用消息队列核心解析
  • Redis 核心概念、数据结构与高可用架构详解
  • B+树原理与 MySQL InnoDB 索引机制解析
  • MySQL AUTO_INCREMENT 插入 0 变成自增值的原因与解决方案

Trending Tags

RocketMQ Windows Feign Docker Zipkin SonarQube OkHttp HttpClient API 性能优化

Contents

©2026 Ryan's Blog. Some rights reserved. · 粤ICP备2022031588号