1.1为什么要使用Git参数?为什么要使用git参数?每个项目代码库都会有不同的分支,(如果不使用多分支流水线的话)对于普通的流水线项目,我们可以使用一个流水线来支持多分支的发布。事实上,有时候你会发现每个分支的集成步骤都是相似的。如果有不同的步骤,我们也可以根据jenkinsfile中不同的分支执行不同的阶段。如何解决固定分支问题?一开始我们的pipeline项目配置分支可能是采用的option参数。创建一个选项参数,更新项目中经常使用的分支,最后开发者在发布时选择对应的分支。貌似解决了固定分支的问题,但是后期维护难度很大,需要不断更改参数值。创建一个字符参数设置一个默认值,然后交给开发人员填写。这确实方便了配置管理人员,但增加了开发人员的负担。手动输入无法避免出错的可能性。让我们通过下面的内容来学习如何使用git参数实现动态分支构建?1.2在freestyle项目中使用当你的项目没有使用pipeline时,可以参考下面的配置来使用git参数。当然,如果你在调试pipeline项目时经常遇到git参数使用问题,也可以看看freestyle项目中如何使用,了解git参数的工作原理。在项目的配置中,我们检查了参数化构建。然后添加git参数。选择变量名称和参数类型。然后将鼠标滚动到最下方,填写项目代码库信息,最后保存配置,返回作业首页,点击项目参数化构建。此时会看到项目代码库对应的所有分支都出现了,我们就可以选择该分支进行构建了。1.3在Pipeline工程中的使用1.3.1普通Pipeline工程这里定义普通Pipeline工程,不将Jenkinsfile内容保存在版本控制系统中,而是存放在JOB中。首先我们添加一个srcUrl参数来定义项目代码库的地址,方便后面在pipeline中调用。然后添加git参数branchName,定义为分支类型。写Jenkinsfile//pipelinepipeline{agent{node{label"build"}}stages{stage("CheckOut"){steps{script{println("${branchName}")checkout([$class:'GitSCM',branches:[[name:"${branchName}"]],doGenerateSubmoduleConfigurations:false,extensions:[],submoduleCfg:[],userRemoteConfigs:[[credentialsId:'gitlab-admin-user',url:"${srcUrl}"]]])}}}}}然后保存配置并返回作业主页。构建一次,您将能够获得项目代码库的分支。对于在作业中保存jenkinsfile,这种方式有利也有弊。优点是方便我们调试代码,缺点是不利于统一管理。您可以酌情使用它。1.3.2流行的Pipeline项目这里我们理解流行的Pipeline项目是因为这个作业使用的jenkinsfile存放在git版本控制系统中。首先我们创建一个测试jenkinsfile,保存在git项目中,命名为git.jenkinsfile。这个文件的内容和上面的方法是一样的,只是jenkinsfile包含在了版本控制中。//pipelinepipeline{agent{node{label"build"}}stages{stage("CheckOut"){steps{script{println("${branchName}")checkout([$class:'GitSCM',branches:[[名称:“${branchName}”]],doGenerateSubmoduleConfigurations:false,扩展:[],submoduleCfg:[],userRemoteConfigs:[[credentialsId:'gitlab-admin-user',url:“${srcUrl}”]]])}}}}}然后让我们创建一个新的管道项目。注意我们现在使用的是两个仓库,一个是Jenkinsfile仓库,一个是项目代码仓库。创建一个参数srcUrl来存储项目代码仓库的URL。默认的git参数会识别Jenkinsfile仓库,所以我们需要在git参数的高级设置中指定我们要使用的仓库地址。80%的错误是因为没有指定仓库,导致获取分支错误等问题。填写Jenkinsfile仓库信息。最后,我们一次构建就可以得到项目代码仓库的分支信息。这里经常会出现获取分支的问题。请仔细参考以上步骤,一定要在git参数中指定我们要使用的仓库,否则会出现获取分支失败等问题。1.3.3使用PipelineasCode我们将所有的参数信息存储在Jenkinsfile中。此时生成的代码不区分是保存在job中还是版本控制系统中。但是,建议您将jenkinsfile保存在版本控制系统中。我们如何生成Jenkinsfile代码?一个方便的工具,我们导航到PipelineSyntax->DeclarativeDirectiveGenerator。最后完整的Jenkinsfile如下所示://pipelinepipeline{agent{node{label"build"}}parameters{stringdefaultValue:'http://192.168.1.200:30088/idevops/idevops-maven-service.git',description:'',name:'srcUrl',trim:falsegitParameterbranch:'',branchFilter:'.*',defaultValue:'origin/master',description:'',name:'branchName',quickFilterEnabled:false,selectedValue:'NONE',sortMode:'NONE',tagFilter:'*',type:'PT_BRANCH',useRepository:'http://192.168.1.200:30088/idevops/idevops-maven-service.git'}阶段{("CheckOut"){步骤{脚本{println("${branchName}")checkout([$class:'GitSCM',branches:[[name:"${branchName}"]],doGenerateSubmoduleConfigurations:false,扩展:[],submoduleCfg:[],userRemoteConfigs:[[credentialsId:'gitlab-admin-user',url:"${srcUrl}"]]])}}}}}在同一个配置过程中,我们构建一次后,可以正常获取项目代码库的分支信息。1.4总结你在使用git参数吗?你遇到过同样的问题吗?这篇文章可以帮助您避免这个问题。这个git参数还是有些不方便的。随着内部devops平台功能的扩展,目前的release是通过devops平台完成参数的选择,最终生成一个Jenkinsjob来运行。在这种情况下,选择的分支和标签放在外围的devops平台中,所以使用什么类型的Jenkins参数并不重要。
