1.1 为什么要使用Git参数?

我们为什么要使用 git参数呢?每个项目代码库都会有不同的分支,(如果你没有用多分支流水线的情况下)对于普通的流水线项目我们可以 让一条流水线来支持多个分支的发布,其实有时候你会发现每个分支的集成步骤都是差不多的。如果出现差异步骤我们也可以在jenkinsfile中根据不同的分支执行不同的stage。

如何解决固定分支问题?起初我们的流水线项目配置分支可能是采用的选项参数。创建一个选项参数然后把项目经常用到的分支给更新上去,最后开发人员在发布的时候来选择对应的分支。看似解决了固定分支问题,但是后期维护起来非常困难,需要不断的更改参数值。

创建一个字符参数设置一个默认值,然后 交给开发人员自己填写。这样的确方便了配置管理人员,给开发人员增加了负担,手动输入避免不了带来了错误发生的可能。

我们来通过下面的内容,掌握如何使用 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项目我们理解为 此job使用的jenkinsfile文件存储在git版本控制系统中。

首先我们创建一个测试jenkinsfile,保存在git项目中,命名为git.jenkinsfile。此文件内容与上面那种方式是一样的,只不过将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仓库,另一个是 项目代码仓库。创建一个参数srcUrl用于存储项目 代码仓库的URL。

默认git参数会识别到Jenkinsfile的仓库,所以我们需要在git参数的高级设置中指定我们要使用的仓库地址。80%错误因为没有指定仓库导致获取分支错误等问题。

填写Jenkinsfile仓库信息。

最后我们来构建一次就能够获取到项目代码仓库的分支信息了。这里经常出现获取 分支的问题,请仔细参考上面的步骤一定要在git参数中指定好我们要用的仓库,否则会出现分支获取失败等问题。

1.3.3 使用Pipeline as Code

我们将参数信息全部放到Jenkinsfile中存储。此时生成的代码就不区分在作业中保存还是在版本控制系统中保存了。不过还是建议大家把jenkinsfile纳入版本控制系统中保存。

我们如何生成Jenkinsfile代码?很方便的工具,我们导航到 流水线语法-> Declarative Directive Generator 。

最后完整的Jenkinsfile如下所示:

//pipelinepipeline{    agent { node { label "build"}}        parameters {      string defaultValue: 'http://192.168.1.200:30088/idevops/idevops-maven-service.git',              description: '',              name: 'srcUrl',              trim: false                   gitParameter  branch: '',                     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'        }    stages{        stage("CheckOut"){            steps{                script{                                       println("${branchName}")                                    checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]],                               doGenerateSubmoduleConfigurations: false,                               extensions: [],                               submoduleCfg: [],                               userRemoteConfigs: [[credentialsId: 'gitlab-admin-user',                               url: "${srcUrl}"]]])                }            }        }    }}

同样的配置过程,我们构建 一次之后就能够 正常获取到项目代码库的分支信息了。

1.4 总结

你是不是在使用git参数时也遇到了相同的问题呢?此文章能够 帮助到大家避免问题的出现。这个git参数还是有些不方便的。随着内部devops平台的功能扩展,目前发布都是通过 devops平台中来完成参数的选择,最后生成一个Jenkins作业来运行。这种情况下选择分支和标签就放在了外围的devops平台中了,这样jenkins的参数使用什么类型都无所谓了。

更多精彩请关注 DevOps云学堂


添加微信小助手devopsvip 回复 "加群",自动加入群聊

点亮 ,告诉大家你也在看

defaultvalue默认显示 请选择_使用Jenkins Git参数实现分支标签动态选择相关推荐

  1. Jenkins 流水线 获取git 分支列表_使用Jenkins Git参数实现分支标签动态选择

    1.1 为什么要使用GIT参数? 我们为什么要使用 git参数呢? 每个项目代码库都会有不同的分支,(如果你没有用多分支流水线的情况下)对于普通的流水线项目我们可以 让一条流水线来支持多个分支的发布, ...

  2. 动态参数 maven_使用Jenkins Git参数实现分支标签动态选择

    1.1 为什么要使用GIT参数? 我们为什么要使用 git参数呢? 每个项目代码库都会有不同的分支,(如果你没有用多分支流水线的情况下)对于普通的流水线项目我们可以 让一条流水线来支持多个分支的发布, ...

  3. MIUI打开相册怎么默认显示全部照片_小米手机让相册默认展示所有图片怎么设置?

    问题:怎么可以将相册默认显示的图片,设置为显示所有呢? MIUI打开相册怎么默认显示全部照片? 小米k40,发现打开相册默认不显示全部照片,每次截图录屏后都不直接显示在照片里,得手动点到全部照片,很不 ...

  4. 下拉选择_在管理Excel中实现联动下拉选择

    在系统中常常出现这样的情况:由于下拉选择的数量太多了,难以高效选择.为此管理Excel通过通过引入多级联动选择的方式来减少下拉选择的困难度.先看下使用效果: 联动下拉选择 这个功能,在管理Excel中 ...

  5. 企业如何正确选择gpu服务器,GPU服务器参数——GPU服务器应该如何选择

    GPU服务器参数--GPU服务器应该如何选择 2019/11/08 作者: 互盟股份 简单来看,选择-GPU-有四个重要参数:浮点运算能力.显存.数据传输与价格. 对于很多科学计算而言,服务器性能主要 ...

  6. 通过数据库绑定的dropdownlist,如何让其第一条默认显示--请选择--

    第一种方法 DropDownList1.Items.Insert(0,"请选择XXX"); 第二种方法 在第一个位置插入一个项就可以 DropDownList1.Items.Ins ...

  7. python列表中随机选择_如何在Python中从列表中随机选择一个项目?

    python列表中随机选择 Python random module provides an inbuilt method choice() has an ability to select a ra ...

  8. h5 video 手机 显示第一帧_解决h5嵌入app后video标签poster不能显示视频第一帧(表现为空白)...

    这里我们先来描述一下问题,页面中使用了video标签,按照video标签的官方介绍下图介绍: 没有设置poster的情况下在浏览器中我们可以看到视频的第一帧,页面效果如下图左图所示:但是嵌入App后, ...

  9. git 怎么切换分支命令_如何在Git中切换分支

    本指南向你展示了如何在Git项目中切换分支. 前提条件Git项目访问终端窗口/Linux系统命令行 签出命令以切换分支 访问命令行并使用checkout命令签出要使用的分支:git checkout ...

最新文章

  1. c++入门代码_Golang Gin 实战(一)| 快速安装入门
  2. Wide ResNet ResNeXt DenseNet DPNet [9] NASNet [10] SENet [11] Capsules [12
  3. 用Tableau画可调整的树状图(Tree Diagram)
  4. neutron plugin 与 extension 编写流程
  5. 使用dict和set
  6. 门户网站服务器迁移,云服务器怎么迁移网站
  7. POJ 3080 - Blue Jeans
  8. 传感器系列之4.6雨滴传感器
  9. 二阶系统阶跃响应实验__ 二阶系统的阶跃响应实验报告
  10. 规则三度体磁力异常 matlab,三维强磁性体的勘探方法及勘探系统与流程
  11. java交通调度,java毕业设计_springboot框架的的车辆调度管理系统
  12. 现行各主流语言的特点
  13. php webshell探索-常见小马
  14. spring源码:九大后置处理器
  15. 计算机中imb二进制数,计算机基础知识总述.doc
  16. Python基础 函数
  17. 《流畅的Python》学习笔记(11):可迭代的对象、迭代器和生成器
  18. 大数据技能修炼的个人道场
  19. 关于submit() 对象不支持此属性或方法的解决方法
  20. 【数据结构】栈的应用-算术表达式求值#数据结构实验任务书

热门文章

  1. Django框架——中间件
  2. 各种排序算法的时间复杂度对比
  3. 软件中的1、同步调用;2、回调;3、异步调用
  4. 为ie和chrome FF单独设置样式的“条件注释法”、“类内属性前缀法”、“选择器前缀法”、实现方法 案例(推荐)
  5. 《scikit-learn》随机森林之深入学习
  6. [可视化-tableau]tableau的学习实践入门篇
  7. leetcode - 1039. 多边形三角剖分的最低得分
  8. vba 将xml导入到excel
  9. 基于nginx-rtmp-module模块实现的HTTP-FLV直播模块(nginx-http-flv-module)
  10. Jetson TX2软件源更新