You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对接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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:57:05