如何编写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}") } } } }
关键改动说明
- 新增Git参数:添加
GIT_REPO_URL和GIT_BRANCH参数,支持动态指定拉取目标,无需硬编码仓库信息 - 代码拉取阶段:用
git命令手动克隆仓库,替代SCM自动拉取逻辑;拉取完成后通过git rev-parse HEAD获取完整提交哈希,截取前7位作为GIT_HASH - 项目名称处理:支持从仓库URL自动提取项目名,也可直接手动指定,适配不同需求
- 环境变量调整:将
PROJECT_NAME和GIT_HASH的赋值移到代码拉取后的script块中,确保变量能正确获取仓库上下文的真实值
内容的提问来源于stack exchange,提问作者vsfm80
相关产品推荐
相关产品推荐

