Jenkins的制品管理
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栈制品
使用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中加入配置:
使用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镜像
Nexus:创建Docker私有仓库
进入Nexus的仓库列表页:Administration→Repository→Repositories,单击“docker(hosted)”
指定Docker私有仓库提供HTTP服务的端口为8595。私有仓库的地址为:http://<ip>:8595。
创建Docker私有仓库凭证
将镜像推送到Docker私有仓库是需要用户名和密码的。我们不能将密码明文写在Jenkinsfile中,所以需要创建一个“Username with password”凭证。
构建并发布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仓库可以被理解为一个文件系统,我们可以在该仓库中创建目录。
创建raw仓库
进入Administration→Repository→Repositories页
单击“raw(hosted)”,进入raw仓库创建页。
输入仓库名称“raw-example”,单击“Create repository”按钮,确认后创建成功。该仓库的地址是:<你的Nexus地址>/repository/raw-example/。
上传制品,获取制品
使用HTTP客户端就可以将制品上传到raw仓库中。我们使用Linux curl命令。
(1)在Jenkins上添加“Username with password”凭证,如图所示。
(2)在Jenkinsfile中加入上传制品的步骤。
curl命令的格式为:
如果目录不存在,nexus将会自动创建
在Jenkins pipeline中获取原始制品时,我们同样使用curl命令。
从其他pipeline中拷贝制品
安装Copy Artifact插件
代码:从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的制品管理的更多相关文章
- Jenkins制品管理
目录 一.简介 二.Jenkins管理制品 三.Nexus maven上传 jenkins上传 管理Docker镜像 管理raw 四.拷贝制品 五.版本号 Version Number 一.简介 制品 ...
- [原]Jenkins(十三)---jenkins用户权限管理
* 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5337874.html 两种策略的比较
- 【Devops】【docker】【CI/CD】jenkins源码管理,添加SSH地址后报错+Jenkins构建报错:Please make sure you have the correct access rights and the repository exists.
jenkins源码管理,添加SSH地址后报错: Could not read from remote repository. Please make sure you have the correct ...
- Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群
一.Jenkins的远程管理 Jenkins的远程管理方式包含: Shell ssh SSH Plugin ansible.saltstack (1)Shell ssh在项目构建时,jenkins使用 ...
- Jenkins的凭证管理
Jenkins的凭证管理 什么是凭证? 凭证(cridential)是Jenkins进行受限操作时的凭据.比如使用SSH登录远程机器时,用户名和密码或SSH key就是凭证.而这些凭证不可能以明文写在 ...
- 聊聊DevOps制品管理-不止是存储制品这么简单
什么是制品? 制品是指由源码编译打包生成的二进制文件,不同的开发语言对应着不同格式的二进制文件:这些二进制文件通常用于运行在服务器上或者作为编译依赖,"制品的管理"是配置管理的重要 ...
- Jenkins的插件管理(安装和更新插件)
使用Jenkins的编译部署项目需要依赖各种插件 下面安装Jenkins的各种插件: 1.登录Jenkins进入以下界面: 2.点击 系统管理 : 3.点击 管理插件 : 4.点击 可选插件 选择你需 ...
- 云计算Docker全面项目实战(Maven+Jenkins、日志管理ELK、WordPress博客镜像)
2013年,云计算领域从此多了一个名词“Docker”.以轻量著称,更好的去解决应用打包和部署.之前我们一直在构建Iaas,但通过Iaas去实现统一功 能还是相当复杂得,并且维护复杂.将特殊性封装到 ...
- [CI]jenkins安装&插件管理&java-helloworld之旅
持续集成概述 没有持续集成时的情况 持续集成最佳实战 维护一个单一的代码库 使构建自动化 执行测试是构建的一部分 集成日志及历史记录 使用统一的依赖包管理库 每天至少集成一次 jenkins实现持续集 ...
随机推荐
- Typescript - 联合类型
原文:TypeScript基本知识点整理 零.序言 联合类型表示一个变量值可以是几种类型之一,我们可以使用 “|” 来分割每个类型: 联合类型的变量在被赋值时,会根据类型推断的规则推断出一个类型: 如 ...
- setContext or setCharacterEncoding
request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值response.setContentType("text/html;char ...
- Spring常用注解(讲解的通俗易懂,很透彻)
使用注解来构造IoC容器 用注解来向Spring容器注册Bean.需要在applicationContext.xml中注册<context:component-scan base-package ...
- java 字符串转日期格式
/** * 字符串转日期格式 * */ public static Date date(String date_str) { try { Calendar zcal = Calendar.getIns ...
- zookeeper ACL(access control lists)权限控制
基本作用: 针对节点可以设置 相关读写等权限,目的为了保障数据安全性 权限permissions可以制定不同的权限范围以及角色 一:ACL构成 zk的acl ...
- Python知识点总结及其介绍链接
Python 弱引用(不会增加引用计数的引用,可以用来做对象缓存,避免循环引用导致内存无法回收):http://python.jobbole.com/85431/ from future import ...
- 你每天跑这么多自动化用例,能发现BUG吗?
阿里QA导读:为什么要度量测试有效性?这么多的CASE,花了大量时间和资源去运行,真能发现bug吗?CI做到90%的行覆盖率了,能发现问题吗?测试用例越来越多,删一些,会不会就发现不了问题了?怎么找出 ...
- Pygame相关
pygame是主要构筑在SDL库基础上的一组Python模块的集合,它使我们能够用Python语言来创建功能完整的游戏和多媒体程序.pygame是高度括平台可移植的,在任何SDL支持的平台上都可以运行 ...
- Introduction Of Gradient Descent
不是一个机器学习算法 是一种基于搜索的优化方法 作用:最小化一个损失函数 梯度上升法:最大化一个效用函数 import matplotlib.pyplot as plt import numpy as ...
- SetTimeout()多次运行函数后越来越快的问题
问题原因很简单,但是由于代码逻辑问题,一直没有考虑到: 网上有个帖子说的很明白:原帖入口 假如你在0时刻点击了一下按钮,那么500ms时数字会跳一下,1000ms会再跳一下,依次类推,1500,200 ...