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# #持续集成# #Jenkins#

动态参数 maven_使用Jenkins Git参数实现分支标签动态选择相关推荐

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

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

  2. defaultvalue默认显示 请选择_使用Jenkins Git参数实现分支标签动态选择

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

  3. Jenkins中参数的使用

    学习是自我的事,自我的事应当自我做好 Jenkins是一款流行的开源持续集成(CI)工具,广泛用于项目开发,具有自动化构建.测试.部署等功能.在Jenkins中提供了很多参数类型,在此整理了一些常用的 ...

  4. CVPR 2020丨动态卷积:自适应调整卷积参数,显著提升模型表达能力

    编者按:轻量级卷积神经网络能够在较低的计算预算下运行,却也牺牲了模型性能和表达能力.对此,微软 AI 认知服务团队提出了动态卷积,与传统的静态卷积(每层单个卷积核)相比,根据注意力动态叠加多个卷积核不 ...

  5. 【WPF】动态设置Binding的ConverterParameter转换器参数

    原文:[WPF]动态设置Binding的ConverterParameter转换器参数 问题:XAML中,想要在一个Bingding语句中再次Bingding. Source="{Bindi ...

  6. 动态卷积:自适应调整卷积参数,显著提升模型表达能力 CVPR 2020

    本文转载自微软研究院AI头条. 编者按:轻量级卷积神经网络能够在较低的计算预算下运行,却也牺牲了模型性能和表达能力.对此,微软 AI 认知服务团队提出了动态卷积,与传统的静态卷积(每层单个卷积核)相比 ...

  7. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken

    项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个 ...

  8. Unity 动态修改URP自带材质参数

    Unity 动态修改URP自带材质参数 前言 代码 Emission 参考连接 前言 修改此处默认参数 代码 Emission 启用自发光效果的代码是 material.EnableKeyword(& ...

  9. JVM-常见JVM参数、如何查看JVM参数、如何动态设置JVM参数

    1 JVM参数 1.1 标准参数 // 查看java版本 -version // help命令就不用了说了吧 -help // -server // 指定类运行所依赖其他类的路径,通常是类库和jar包 ...

最新文章

  1. 查找算法-(顺序查找、二分查找、插值查找、斐波那契查找)
  2. jQuery进阶部分笔记
  3. Android 应用开发---ViewPager----1.相关基本知识
  4. Sophos 和 ReversingLabs 公开含2000万个 PE 文件的数据集
  5. (转自孟岩的CSDN)理解矩阵
  6. Reporting Services 空白页面
  7. web性能优化的一些方法
  8. 安卓设备修改屏幕像素密度以及查看屏幕分辨率
  9. python爬取中央气象台台风网当前台风实况和预报数据
  10. NewLife kick off
  11. LVGL系列(四)概述 之 位置、尺寸和布局
  12. python+tkinter+threading制作多线程简易音乐播放器(自动播放,上一曲,下一曲,播放,暂停,实时显示歌曲名并能自动切换歌曲的功能)
  13. Windows电脑加速小技巧(VIP典藏版)
  14. 读书笔记—做事坚定,做人柔软
  15. py 网站实时监控+可手动回溯回放网站数据的实现
  16. 如何将JPG转换为PNG?两种图片格式转换的方法交给你
  17. 什么是RFID? RFID简介,射频识别技术发展历史.金属液体对RFID的影响
  18. android石头剪刀布的小游戏,JavaFX实现石头剪刀布小游戏
  19. C语言两个自增相加,C语言前自增与后自增
  20. JavaScript弹出新的页面,像在web迅雷首页点击某一下载文件名时弹出的新页面(窗体)

热门文章

  1. 微机化远动系统与计算机网络,远动技术教案_第3章_微机监控系统数据通信网络结构及原理.pdf...
  2. python函数拟合编程_Python应用实现双指数函数及拟合代码实例
  3. esxi usb插口_酷暑大作战 | USB-C风扇新体验
  4. export LD_LIBRARY_PATH 的使用
  5. Iterator模式
  6. wordpress 后台慢_建站经验-wordpress用户注册收不到验证邮件
  7. 【转】RAX,eax,ax,ah,al 关系
  8. 【转】WPF PRISM开发入门一( 初始化PRISM WPF程序)
  9. 投标报价得分计算程序_什么是投标报价?怎么计算呢?
  10. 什么是runtime?