对接Gitea的Jenkins多分支流水线Jenkinsfile编写求助
Jenkins多分支流水线调整方案
前置配置说明
你需要先完成Jenkins侧的基础配置再使用调整后的Jenkinsfile:
- 安装Jenkins Gitea插件,在Gitea仓库配置webhook,触发事件选择
推送、合并请求,替代原来的定时轮询触发,响应更及时 - 在Jenkins凭据管理中添加镜像仓库的登录凭据,凭据ID记为
docker-registry-cred - Jenkins执行节点提前安装Docker环境,配置好镜像仓库访问权限
调整后的完整Jenkinsfile
pipeline { agent any triggers { // 保留兜底轮询,建议配置Gitea webhook后可以删除该行 pollSCM('*/15 * * * *') } options { disableConcurrentBuilds() } tools { maven 'Maven 3.8.3' jdk 'jdk11' } environment { // 替换为你实际的镜像仓库地址 REGISTRY = 'registry.example.com' // 替换为你实际的项目镜像名 IMAGE_NAME = "your-project/${env.JOB_NAME}:${env.BUILD_ID}" // Jenkins中存储的镜像仓库登录凭据ID DOCKER_CRED = credentials('docker-registry-cred') } stages { stage('Initialize') { steps { sh ''' echo "PATH: ${PATH}" echo "M2_HOME: ${M2_HOME}" echo "当前分支: ${BRANCH_NAME}" echo "PR目标分支: ${CHANGE_TARGET}" ''' } } stage('Build & Test') { // 所有场景都执行:feature分支提交、任意PR都会触发 when { anyOf { branch pattern: 'feature/*', comparator: 'GLOB' buildingTag() changeRequest() } } steps { sh 'mvn clean package' } post { success { junit 'target/surefire-reports/**/*.xml' // 向Gitea回传构建成功状态,控制PR合并权限 giteaNotify status: 'SUCCESS' } failure { giteaNotify status: 'FAILURE' } } } stage('Build Docker Image') { // 仅向master分支提PR时执行 when { changeRequest target: 'master' } steps { sh 'docker build -t ${IMAGE_NAME} .' } } stage('Push Docker Image') { when { changeRequest target: 'master' } steps { sh 'docker login -u ${DOCKER_CRED_USR} -p ${DOCKER_CRED_PSW} ${REGISTRY}' sh 'docker push ${IMAGE_NAME}' } } stage('Deploy to Environment') { when { changeRequest target: 'master' } steps { // 替换为你实际的部署脚本,比如调用k8s部署、ssh到服务器更新容器等 sh 'bash ./deploy.sh ${IMAGE_NAME}' } } } }
规则匹配说明
- feature分支开发场景:开发者向
feature/xxx分支提交代码时,自动触发Initialize、Build & Test阶段,执行单元测试和构建,符合要求1 - PR到development分支场景:开发者提交指向
development分支的PR时,自动触发全量构建测试,测试成功后Gitea侧会显示校验通过状态,管理员仅能在校验通过后合并PR,符合要求2 - PR到master分支场景:提交指向
master分支的PR时,除了基础构建测试,还会依次执行镜像构建、镜像推送、部署流程,符合要求3
内容的提问来源于stack exchange,提问作者Daniel Pomrehn
相关产品推荐
相关产品推荐

