Jenkins的制品管理

制品是什么?

也叫产出物或工件。制品是软件开发过程中产生的多种有形副产品之一。广义的制品包括用例、UML图、设计文档等。而狭义的制品就可以简单地理解为二进制包。虽然有些代码是不需要编译就可以执行的,但是我们还是习惯于将这些可执行文件的集合称为二进制包。

制品管理仓库

最简单的制品管理仓库就是将制品统一放在一个系统目录结构下。但是很少有人这样做,更多的做法是使用现成的制品库。

制品管理涉及两件事情:一是如何将制品放到制品库中;二是如何从制品库中取出制品。

目前现成的制品库有:Nexus、Artifactory。(nexus经常被用来搭建maven私有仓库)

docker安装Nexus

查找镜像

$ docker search nexus

下载镜像

$ docker pull sonatype/nexus3

启动容器

docker run -d --name nexus3 \--restart=always \
-p 8081:8081 \
-p 8082:8082  \
-p 8083:8083  \
-p 8084:8084  \
-p 8085:8085   \
-v /opt/nexus-data:/nexus-data \
sonatype/nexus3

archiveArtifacts制品管理

archiveArtifacts步骤能对制品进行归档,然后你就可以从Jenkins页面上下载制品了,如图

Jenkinsfile内容如下:

archiveArtifacts的参数

• artifacts(必填):字符串类型,需要归档的文件路径,使用的是Ant风格路径表达式。

• fingerprint(可选):布尔类型,是否对归档的文件进行签名。

• excludes(可选):字符串类型,需要排除的文件路径,使用的也是Ant风格路径表达式。

• caseSensitive(可选):布尔类型,对路径大小写是否敏感。

• onlyIfSuccessful(可选):布尔类型,只在构建成功时进行归档。

archiveArtifacts步骤并不只用于归档JAR包,事实上,它能归档所有类型的制品。

管理Java栈制品

  1. 使用maven发布制品到nexus中

    Maven Deploy插件能将JAR包及POM文件发布到Nexus中

    使用Deploy插件发布需要以下几个步骤。

    (1)配置发布地址。在Maven项目的POM文件中加入:

    Deploy插件会根据Maven项目中定义的version值决定是使用nexus-snapshot仓库还是nexus-release仓库。当version值是以-SNAPSHOT后缀结尾时,则发布到nexus-snapshot仓库。

    (2)配置访问Nexus的用户名和密码。在Nexus中,我们配置了只有授权的用户名和密码才能发布制品。这时需要在Maven的settings.xml中加入配置:

    1. 使用Nexus插件发布制品

      安装Nexus Platform插件

      (1)进入Manage Jenkins→Configure System→Sonatype Nexus页,设置Nexus 3.x的服务器地址,如图

      • 在“Credentials”选项处,增加了一个具有发布制品到Nexus中的权限的用户名和密码凭证。

      • Server ID字段的值,在Jenkinsfile中会引用。

      设置完成后,单击“Test connection”按钮测试设置是否正确。

      (2)在Jenkinsfile中加入nexusPublisher步骤。

      ​ nexusPublisher的参数介绍:

      ​ • nexusInstanceId:在Jenkins中配置Nexus 3.x时的Server ID。

      ​ • nexusRepositoryId:发布到Nexus服务器的哪个仓库。

      ​ • mavenCoordinate:Maven包的坐标,packaging值与Maven中的packaging值一致,可以是jar、war、pom、hpi等。

      ​ • mavenAssetList:要发布的文件,如果是pom.xml,则extension必须填“xml”。

      此插件的缺点:

      ​ • 每个Maven项目都可能不同,必须为每个Maven项目写nexusPublisher方法。

      ​ • 对于多模块的Maven项目,nexusPublisher的参数写起来十分啰唆。

使用Nexus管理Docker镜像

  1. Nexus:创建Docker私有仓库

    进入Nexus的仓库列表页:Administration→Repository→Repositories,单击“docker(hosted)”

    指定Docker私有仓库提供HTTP服务的端口为8595。私有仓库的地址为:http://<ip>:8595。

  2. 创建Docker私有仓库凭证

    将镜像推送到Docker私有仓库是需要用户名和密码的。我们不能将密码明文写在Jenkinsfile中,所以需要创建一个“Username with password”凭证。

  1. 构建并发布Docker镜像

    当私有仓库创建好后,我们就可以构建Docker镜像并发布到仓库中了。假设Dockerfile与Jenkinsfile在同一个目录下,我们看一下Jenkinsfile的内容。

    ​ withDockerRegistry步骤做的事情实际上就是先执行命令:docker login-u admin-p****http://192.168.0.101:8595。其间,所生成的config.json文件会存储在工作空间中。然后再执行闭包内的命令。

    将镜像推送到Nexus中后,在Nexus中可以看到如图

    注:由于是私有的非安全(HTTP)的仓库,所以需要配置Docker的daemon.json。

Nexus raw制品管理

​ raw仓库可以被理解为一个文件系统,我们可以在该仓库中创建目录。

  1. 创建raw仓库

    进入Administration→Repository→Repositories页

    单击“raw(hosted)”,进入raw仓库创建页。

    输入仓库名称“raw-example”,单击“Create repository”按钮,确认后创建成功。该仓库的地址是:<你的Nexus地址>/repository/raw-example/。

  2. 上传制品,获取制品

    使用HTTP客户端就可以将制品上传到raw仓库中。我们使用Linux curl命令。

    (1)在Jenkins上添加“Username with password”凭证,如图所示。

    (2)在Jenkinsfile中加入上传制品的步骤。

    curl命令的格式为:

    如果目录不存在,nexus将会自动创建

  3. 在Jenkins pipeline中获取原始制品时,我们同样使用curl命令。

从其他pipeline中拷贝制品

  1. 安装Copy Artifact插件

  2. 代码:从core项目中拿到最后一次构建成功的制品。

copyArtifacts步骤的参数详解:

​ • projectname(必填):字符串类型,Jenkins job或pipeline名称。

​ • selector:BuildSelector类型,从另一个pipeline中拷贝制品的选择器,默认拷贝最后一个制品。

​ • parameters:字符串类型,使用逗号分隔的键值对字符串(name1=value1,name2=value2),用于过滤从哪些构建中拷贝制品。

​ • filter:字符串类型,Ant风格路径表达式,用于过滤需要拷贝的文件。

​ • excludes:字符串类型,Ant风格路径表达式,用于排除不需要拷贝的文件。

​ • target:字符串类型,拷贝制品的目标路径,默认为当前pipeline的工作目录。

​ • optional:布尔类型,如果为true,则拷贝失败,但不影响本次构建结果。

​ • fingerprintArtifacts:布尔类型,是否对制品进行签名,默认值为true。

​ • resultVariableSuffix:上例中,无法得知我们到底拿的是core项目的哪次构建的制品。CopyArtifact 插件的设计是将其构建次数放到一个环境变量中。这个环境变量名就是在COPYARTIFACT BUILD NUMBER 后拼上resultVariableSuffix,比如resultVariableSuf fix值为corejob,那么就在pipeline中通过变量COPYARTIFACT BUILD NUMBER corejob拿到源pipeline的构建次数了。

​ 几种常用的获取选择器:

• lastSuccessful:最后一次构建成功的制品。方法签名为lastSuccessful(boolean stable)。stable为true表示只取构建成功的制品,为false表示只要构建结果比UNSTABLE好就行。

• specific:指定某一次构建的制品。方法签名为specific(String buildNumber)。buildNum ber表示指定取第n次构建的制品。

• lastCompleted:最后一次完成构建的制品,不论构建的最终状态如何。方法签名为lastCompleted()。

• latestSavedBuild:最后一次被标记为keep forever的构建的制品。方法签名为latestSavedBu ild()。

版本号管理

语义化版本格式为:主版本号.次版本号.修订号。版本号递增规则如下:

• 主版本号:当作了不兼容的API修改时。

• 次版本号:当作了向下兼容的功能性新增时。

• 修订号:当作了向下兼容的问题修正时。

先行版本号及版本编译元数据可以加到“主版本号.次版本号.修订号”的后面,作为延伸。以下是常用的修饰词。

• alpha:内部版本。

• beta:测试版本。

• rc:即将作为正式版本发布。

• lts:长期维护。

方便生成版本号的Version Number插件

VersionNumber步骤支持以下参数。

• versionNumberString:字符串类型,版本号格式,用于生成版本号。只能使用单引号,以防格式中的占位符被转义。版本号格式支持多种占位符,稍后介绍。

• versionPrefix:字符串类型,版本号的前缀。

• projectStartDate:字符串类型,项目开始时间,格式为yyyy-MM-dd,用于计算项目开始后的月数和年数。

• worstResultForIncrement:字符串类型,如果本次构建状态比上一次构建状态更糟糕,则BUILDS_TODAY、BUILDS_THIS_WEEK、BUILDS_THIS_MONTH、BUILDS_THIS_YEAR占位符的值不会增加。worstResultForIncrement可以设置的值有SUCCESS、UNSTABLE、FAILURE、ABORTED、NOT_BUILT(默认)。此参数较少使用。versionNumberString参数使用占位符生成版本号。部分占位符本身支持参数化。接下来分别介绍它们。

• BUILD DATE FORMATTED:格式化的构建日期,支持参数化,如${BUILD DATEFORMATTED,"yyyy-MM-dd"}。

• BUILD DAY:构建日期,支持X和XX参数。比如是12月2日,${BUILD DAY}将返回2,${BUILD DAY,X}将返回2,${BUILD DAY,XX}将返回03。

• BUILD WEEK:今年构建的星期数,支持X和XX参数。

• BUILD MONTH:今年构建的月数,支持X和XX参数。

• BUILD YEAR:今年构建的年份。

比如构建的时间为2018-12-02,那么BUILD_DAY的值为2,BUILD_WEEK的值为49,BUILD_MONTH的值为12,BUILD_YEAR的值为2018。

接下来是一组和构建数相关的占位符:BUILDS TODAY、BUILDS THIS WEEK、BUILDS THISMONTH、BUILDS THIS YEAR,它们分别表示当天、本星期、本月、本年完成的构建数。

BUILDS ALL TIME表示自从项目开始后完成的总构建数。MONTHS SINCE PROJECT START和YEARS SINCE PROJECT START分别表示自项目开始日期起已过去的日历月数和年数。

Jenkins的制品管理相关推荐

  1. Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群

    一.Jenkins的远程管理 Jenkins的远程管理方式包含: Shell ssh SSH Plugin ansible.saltstack (1)Shell ssh 在项目构建时,jenkins使 ...

  2. jenkins 源码管理 returned status code 128: stdout: stderr: fatal: unable to access “****” 403 解决办法

    在配置jenkins 源码管理 远程链接git时 提示 报错 Failed to connect to repository : Command"usr/bin/git ls-remote ...

  3. Jenkins用户权限管理

    我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限 安装Role-based Authorization Strategy插件 开启权限全 ...

  4. 下一代云原生应用制品管理平台,容器镜像服务企业版优惠进行时

    随着越来越多的企业拥抱容器.拥抱云原生技术,享受技术带来的弹性.敏捷.可移植的便利,但是在实现容器技术生产落地时,很难规避以下痛点问题: 1. 运维复杂度:需要自建一个高可用的镜像服务去面对峰值流量等 ...

  5. Jenkins 使用slave管理进行持续集成测试说明

    概述&目的 由于中心项目过多,但所有项目特点是持续时间长,变更少,所以易于做CI(持续集成)的build和test,持续检查每个项目软件的健康状况.但前期做持续集成遇到一些问题,在持续集成软件 ...

  6. Jenkins凭证/凭据管理详解

    文章目录 一.Jenkins中的凭证 `凭证类型` `凭证范围` 系统 全局 用户 `凭证域` `凭证提供者` 系统凭证提供者 (Jenkins 凭证提供者,`常用`) 用户凭证提供者 文件夹凭证提供 ...

  7. Jenkins之用户管理

    1. 操作环境 1. Jenkins Jenkins 2.75 2. 操作位置   在Jenkins的主界面中点击[系统管理]   在[系统管理]页面点击[管理用户]   我们可以在[管理用户]界面中 ...

  8. java 自动化编译_构建Jenkins自动化编译管理环境

    今天研究了一下Jenkins,有了一个粗浅的认识,顺手把构建的过程说一下,后续慢慢补充: (1)Secure CRT 连接到Linux服务器 要注意的一点是,要搞好一个文件传输的路子,否则不好传东西. ...

  9. Nexus制品库管理:二进制制品管理:清除策略

    在2018年10月份发布的Nexus 3.14版中提供了CleanUp功能,这对于使用Nexus的用户是一个原本早就该提供的功能,在这个功能中提供了对于长时间不使用的二进制制品的清除策略.这篇文章主要 ...

最新文章

  1. 微信小程序之生成二维码
  2. linux下查看当前用户的 三个命令
  3. Spring Boot2.x-12 Spring Boot2.1.2中Filter和Interceptor 的使用
  4. 用小括号表达一个长字符串
  5. 自网站服务器,教你如何配置自的网站服务器.doc
  6. 常用的C#正则表达式!
  7. 国贸专业要考计算机二级,国贸专业考计算机二级有没有必要
  8. 数据填充规则之PKCS7
  9. API文档和代码片段管理器:​​​​Dash
  10. 翻译:使用 AWS Deep Racer 的日志分析工具
  11. AE一键去黑底的插件UnMult
  12. 阿里云语音合成1.0版
  13. Web前端工程师就业薪资有多少?新人能月入过万吗?
  14. 操作系统的基本类型、工作流程及其优缺点
  15. Redis面试知识扫盲(面试宝典)
  16. iOS-app更新和强制更新
  17. 有趣的推理html,关于有趣的推理评课稿
  18. 连接git仓库失败解决办法
  19. 几个简单又实用的配色技巧
  20. bash shell 命令

热门文章

  1. 论印度为什么软件行业这么发达(搞笑篇)
  2. 微信公众号开发,微信支付功能开发(网页JSAPI调用)
  3. Python基础_第2章_Python运算符与if结构
  4. Onvif协议学习:14、球机云台控制PTZ
  5. 软件测试助理利弊,女生做软件测试的利弊都有什么?
  6. 高三计算机教学总结,2021年高三信息技术教学工作总结范文.doc
  7. 深大计算机图形学大作业之虚拟场景建模
  8. android 名片识别 简书,nodejs实现名片识别
  9. 申请GitHub学生包,0成本搭建WordPress教程
  10. 真的有必要定义VO,BO,PO,DO,DTO吗?