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

如何编写Jenkins Pipeline脚本拉取指定仓库并获取Git变量

自定义Jenkins Pipeline拉取指定仓库并获取Git变量

核心改动要点

  • 添加代码拉取阶段,手动克隆指定仓库到Jenkins工作区
  • 手动提取Git提交哈希、仓库名称等变量,替代原env.GIT_COMMIT类自动变量
  • 调整环境变量定义逻辑,确保后续阶段能正确引用这些变量

修改后的完整Pipeline脚本

@Library("cnv-jenkins-sharedlib") _

pipeline {
    agent {
        label 'cnv-jobs'
    }
    options { 
        timestamps ()
        disableConcurrentBuilds() 
    }
    tools {
        maven 'Maven_3.9.2'
        jdk 'JDK11'
    }
    parameters {
        choice(name: 'StageName', choices: ['test', 'dev' ], description: '选择部署环境')
        booleanParam(name: 'deploy', defaultValue: false, description: '是否执行部署')
        // 新增参数:动态指定要拉取的Git仓库地址和分支
        string(name: 'GIT_REPO_URL', defaultValue: 'https://git.example.com/your/project.git', description: '目标代码仓库地址')
        string(name: 'GIT_BRANCH', defaultValue: 'test', description: '要拉取的分支名')
    }  
    environment {
        registryUrl = 'cprd-doc-reg01.example.com:10012'
        DOCKER_CREDS = credentials('cnv_docker_reg_creds')
        ENV = "${params.StageName}"
        DEPLOY_BRANCH = "${params.GIT_BRANCH}"
        // 先初始化空值,后续拉取代码后赋值
        PROJECT_NAME = ""
        GIT_HASH = ""
    }

    stages {
        stage('Checkout Source Code') {
            steps {
                script {
                    // 拉取指定仓库的代码到当前工作区
                    git url: params.GIT_REPO_URL, branch: params.GIT_BRANCH
                    
                    // 获取最新提交哈希(截取前7位)
                    def fullCommitHash = sh(script: 'git rev-parse HEAD', returnStdout: true).trim()
                    env.GIT_HASH = fullCommitHash.take(7)
                    
                    // 从仓库URL自动提取项目名称(例如从https://git.example.com/your/project.git提取project)
                    def repoUrl = params.GIT_REPO_URL
                    env.PROJECT_NAME = repoUrl.split('/')[-1].replace('.git', '')
                    
                    // 若不需要自动提取,可手动指定项目名,替换上面的自动提取逻辑
                    // env.PROJECT_NAME = "background-osago-tarifficaiton-service"
                }
            }
        }

        stage('prepare Environment'){
            steps {
                GetBuildVersion()
            }
        }

        stage('Build and Sonar Scanner') {
            steps {
                MvnBuild(registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}", PROFILE: "${ENV}stand")
            }
        }

        stage('Build image'){
            steps {
                cnvDockerBuild(dockerFile: "src/main/docker/Dockerfile.jvm", registryUrl: "${registryUrl}", imageName: "cnv-${PROJECT_NAME}", imageTag: "build-${GIT_HASH}")
            }
        }

        stage("Deploy to K8S") {
            when { expression { params.deploy } } 
            steps {
                CnvDeployK8S(imageTag: "build-${GIT_HASH}")
            }
        }
    }
}

关键改动说明

  1. 新增Git参数:添加GIT_REPO_URL和GIT_BRANCH参数,支持动态指定拉取目标,无需硬编码仓库信息
  2. 代码拉取阶段:用git命令手动克隆仓库,替代SCM自动拉取逻辑;拉取完成后通过git rev-parse HEAD获取完整提交哈希,截取前7位作为GIT_HASH
  3. 项目名称处理:支持从仓库URL自动提取项目名,也可直接手动指定,适配不同需求
  4. 环境变量调整:将PROJECT_NAME和GIT_HASH的赋值移到代码拉取后的script块中,确保变量能正确获取仓库上下文的真实值

内容的提问来源于stack exchange,提问作者vsfm80

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:33:36