码迷,mamicode.com
首页 > 其他好文 > 详细

Jenkins

时间:2020-02-08 09:52:43      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:变更   保留   policy   开发   安装与配置   ant   程序   公司   httpd服务   

Jenkins的使用

通过Jenkins把我们的代码从远程仓库部署到测试环境,部署到生产环境,实现一个集成

将我们的代码在它提交的那一刻到最后部署到生产环境的流程串起来。

jenkins简介:

JENKINS 是一个用 JAVA 编写的开源的持续集成工具。

在与 ORACLE 发生争执后,项目从 HUDSON 项目独立出来。

JENKINS 提供了软件开发的持续集成服务。

它运行在 SERVLET 容器中(例如 APACHE TOMCAT)。

它支持软件配置管理(SCM)工具(包括 ACCUREV SCM、CVS、SUBVERSION、 GIT、 PERFORCE、CLEARCASE 和 RTC), 可以执行基于 APACHE ANT 和 APACHE MAVEN的项目,以及任意的 SHELL 脚本和 WINDOWS 批处理命令。JENKINS 的主要开发者是川口耕介。JENKINS 是在 MIT 许可证下发布的自由软件。
  官方网站:https://jenkins.io/
  清华镜像地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/

企业代码上线历史:

代码发布上线是每一个 IT 企业必须要面临的,而且不管是对开发或者是运维来说,代
码上线本身就是一个件非常痛苦的事情,很多时候每一次发布都是一次考验。为了提高上线
的效率,代码上线的方式,方法,工具也不断的发展,基本上可以分为以下几个阶段:
阶段 1-没有构建服务器
软件在开发者的机器上通过 Ant 或其它脚本手动构建,代码保存在中央源码仓库中,但
是开发者不是经常提交本地的修改。每次需要发布的时候,开发者手动合并修改,这个过程
是相当痛苦的。
阶段 2-晚上进行构建
在这个阶段,团队有构建服务器,自动化的构建在晚上进行。构建过程只是简单的编译
代码,没有可靠的和可重复的单元测试。然而,开发人员每天提交代码。如果某个开发人员
提的代码和其他人的代码冲突的话,构建服务器会在第二天通过邮件通知团队。所以又一段
时间构建是处于失败状态的。
阶段 3-晚上进行构建并进行自动化测试
团队对 CI 和自动化测试越来越重视。无论什么时候版本管理系统中的代码改变了都会
触发编译构建过程,团队成员可以看到是代码中的什么改变触发了这个构建。并且,构建脚
本会编译应用并且会执行一系列的单元测试或集成测试。除了邮件,构建服务器还可以通过
其他方式通知团队成员,如:IM。失败的构建被快速的修复。
阶段 4-代码质量度量
自动化的代码质量和测试覆盖率的度量手段有助于评价代码的质量和测试的有效性。代
码质量的构建会产生 API 文档。
阶段 5-更加认真地对待测试
CI 和测试紧密相关。如今,像测试驱动开发被广泛地使用,使得对自动化的构建更加
有信心。应用不仅仅是简单地编译和测试,而是如果测试成功会被自动的部署到一个应用服
务器上来进行更多的综合的 end-to-end 测试和性能测试。
阶段 6-验收测试和更加自动化的部署
验收测试驱动的开发被使用,使得我们能够了解项目的状态。这些自动化的测试使用行
为驱动的开发和测试驱动的开发工具来作为交流和文档工具,发布非开发人员也能读懂的测
试结果报告。由于测试在开发的早起就已经被自动化的执行了,所以我们能更加清楚地了解
到什么已经做了,什么还没有做。每当代码改变或晚上,应用被自动化地部署到测试环境中,
以供 QA 团队测试。当测试通过之后,软件的一个版本将被手工部署到生产环境中,团队也
可以在出现问题的时候回滚之前的发布。
阶段 7-持续部署
对自动化的单元测试,集成测试和验收测试的信心使得我们可以使用自动化的部署技术
将软件直接部署到生产环境中。但是测试还是有可能不能真正的反映现实的环境

Jenkins安装

环境准备

最小硬件需求:256M 内存、1G 磁盘空间,
通常根据需要 Jenkins 服务器至少 1G 内存,50G
+磁盘空间。若是有编译型的任务,要设置高一点 软件需求:由于 jenkins 是使用 java 语言编写的,所以需要安装 java 运行时环境(jdk)
1、两台安装好Centos7.4系统的虚拟机,内存1G+
2、所有虚拟机的防火墙和SELinux关闭
3、主机名及IP地址关系如下:
Jenkins 10.0.0.64 不需要安装软件
Gitlab 10.0.0.63 在装好gitlab
4、Linux中能发邮件的账号

获取安装包

可以从 Jenkins 官方网站及清华镜像站下载 jenkins 安装包,
也可以通过本教程配套的百度网盘下载对应的安装包
本次课程采用 jenkins
-2.99 版本,jdk-8u121-linux-x64版本,
http://pkg.jenkins.io/redhat-stable/
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
本次采用rpm,下载rpm包
或者从网盘下载

安装jdk

可以使用 YUM 方式安装安装 open JDK1.8 版本,也可以使用我提供的 rpm 安装,我们课
程使用 RPM 方式安装
[root@jenkins src]# rpm -ivh jdk-8u121-linux-x64.rpm
Preparing...
################################# [100%]
Updating / installing...
1:jdk1.8.0_121-2000:1.8.0_121-fcs
################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
[root@jenkins src]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

安装jenkins


[root@jenkins src]# rpm -ivh jenkins-2.99-1.1.noarch.rpm
warning: jenkins-2.72-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key
ID d50582e6: NOKEY
Preparing...
################################# [100%]
Updating / installing...
1:jenkins-2.99-1.1
################################# [100%]
 

启动、配置jenkins

[root@jenkins tools]# systemctl start jenkins
[root@jenkins tools]# systemctl status jenkins

Jenkins 默认监听 8080,服务启动后我们可以在浏览器中输入 http://您服务器的 ip地址:8080 访问 jenkins 服务。
技术图片

[root@jenkins tools]# cat /var/lib/jenkins/secrets/initialAdminPassword
db46467d9186489ba2298f3b99c62824

登陆进去后,系统开始联网去加载插件,这是一个很漫长的过程。

如果等不住了,网络不好,就断掉网络。再开,进入插件安装界面

技术图片

定制jenkins,需要安装插件,左边是安装常用插件,右边是自己选择安装。

本次两种方式都不用。因为安装起来很费时间,而且有的不一定会用。

所以,点右上角的X,进入下一步

技术图片

 点击按钮进入jenkins

技术图片

为了方便修改一下密码

右上角admin------>设置------>修改密码123456

Jenkins插件管理

Jenkins 本身是一个引擎、一个框架,只是提供了很简单功能,

其强大的功能都是通过插件来实现的,

jenkins 有一个庞大的插件生态系统,为 Jenkins 提供丰富的功能扩展。

安装插件的方式

1、常规安装插件流程

(第一种方式)

主页------系统管理------管理插件------可选插件------勾选插件------安装

2、插件页面-----高级选项卡------设置代理(官网下载慢的时候)

3、插件页面-----高级选项卡------上传插件(下载好的)

(第二种方式)

去官网下载,或者去清华镜像

4、在安装好插件的Jenkins下,将插件目录打包,复制到新装的系统下的插件目录下------重启

(第三种方式)

Jenkins下,一切皆文件,没有数据库

覆盖插件目录

本次用做好的插件目录,覆盖我们刚安装的目录

网盘中找到文件plugins.tar.gz上传到Linux系统中(/server/toos我还是习惯放在这里)

包很大,221.67M,上传完毕,开始操作

tar xf plugins.tar.gz 
cd plugins/
mv * /var/lib/jenkins/plugins/

重启jenkins后,就安装好了

[root@jenkins plugins]# systemctl restart jenkins

在浏览器刷新,需要重新登录,账号admin,密码用刚刚重新设置的123456

登入之后,在已安装插件中,可以看到很多已经装好的插件,暂时都不要更新。

用这种安装方法的好处就是,不用一个一个的挑选和等待下载,节省很多时间,尤其是网络不好好的时候。

Jenkins常用目录及文件

学习 Jenkins,首先要明白一点,那就是 jenkins 下一切兼文件,

也就是说 jenkins 没有数据库,所有的数据都是以文件的形式存在,

所以要了解 Jenkins 的主要目录及文件,通过命令我们可以查看到所有的 jenkins 目录及文件的位置

[root@jenkins plugins]# rpm -ql jenkins
/etc/init.d/jenkins            # 启动文件
/etc/logrotate.d/jenkins       # 日志相关
/etc/sysconfig/jenkins         # 主配置文件
/usr/lib/jenkins               
/usr/lib/jenkins/jenkins.war   # Jenkins 的主程序
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins               # 主目录
/var/log/jenkins               # 日志文件目录

Jenkins主配置文件

/etc/sysconfig/jenkins 是 Jenkins 的主配置文件:

我们在这里主要配置 Jenkins 的工作目录、启动用户、启动端口。
技术图片

如果要复制文件到新的系统中,复制前看一下文件和目录的权限,复制过去要修改权限

技术图片

Jenkins 默认的用户为 jenkins,生产环境建议使用 jenkins 用户,然后使用 sudo 进行
授权,我们实验学习过程为了避免各种权限问题,改为 root 用户

技术图片

Jenkins主目录

最重要的目录,如果要备份,就备份这个目录就行了,

/var/lib/jenkins 是 Jenkins 默认配置的主工作目录,我们可以在主配置文件进行设置,其中主要的目录为

jobs 目录:存放 jobs 的配置及每次构建的结果;

plugins 目录:Jenkins 插件目录,存放我们已经安装的插件;

worksspace:工作区目录,每次 job 执行构建时的工作目录,

users 目录:存放与用户相关的配置文件。

Jenkins主程序目录

/usr/lib/jenkins/jenkins.war 是 Jenkins 的主程序

如果以后要升级jenkins,简便的办法就是,把一个新的war包复制过来

然后重启,就好了

其他目录及文件

/var/log/Jenkins        Jenkins 日志文件目录
/etc/init.d/Jenkins     Jenkins 启动文件

Jenkins 创建freestyl项目

自由风格项目

构建作业是一个持续集成服务器的基本职能,构建作业的形式多种多样,

可以是编译和单元测试,也可能是打包及部署,或者是其他类似的作业。

在 Jenkins 中,构建作业很容易建立,而且根据你的需要你可以安装各种插件,来创建多种形式构建作业,下面我们先来学习创建自由式构建作业。
自由式的构建作业是灵活和可配置的选项,并且可以用于任何类型的项目,

0、新建Job

它的配置相对简单,其中很多配置在的选项也会用在其他构建作业中。
在 Jenkins 主页面,点击左侧菜单栏的“新建item”或者“New job”

技术图片

需要注意:
1、job 名称需要有规划,以便于后面的权限管理; 2、创建 job 后不要轻易更改名称,因为 jenkins 一切皆文件, 很多关于 job 的文件,都是以该名称命名,当你改名后,一般不会删除旧文件, 而是会再重新创建一份新的文件。 输入 job 名称,选择类型后,点击 OK 后创建 job,进入 job 配置页面,此时在 Jenkins 的主目录下的 jobs 目录已经生成了以你 Job 名称命名的文件夹

1、执行Linux命令、脚本

完成创建,进入配置页面,在命令行看下job下生成了什么

[root@jenkins jenkins]# cd jobs/
[root@jenkins jobs]# ll
total 0
drwxr-xr-x 3 jenkins jenkins 38 Mar 20 20:30 My-free-Style-job
[root@jenkins jobs]# cd My-free-Style-job/
[root@jenkins My-free-Style-job]# ll
total 4
drwxr-xr-x 2 jenkins jenkins  23 Mar 20 20:30 builds
-rw------- 1 jenkins jenkins 468 Mar 20 20:30 config.xml
勾选“丢弃旧的构建”,这是我们必须提前考虑的重要方面,
就是我们如何处理构建历史,构建作业会消耗大理的磁盘空间,
尤其是你存储的构建产物(比如执行 java 构建时会生成的 JAR、WAR 等)

该选项允许你限制在构建历史记录的作业数。你可以告诉 Jenkins 只保留近的几次构建,
或者只保留指定数量的构建,此外,Jenkins 永远不会删除后一个稳定和成功的构建。 具体数据的指定要根据你项目的实际情况而定,我一般设置为 5、5

技术图片

源代码,暂时不讲

构建触发器,就是怎么来触发构建,可以设置自动,后面再继续

构建环境,后面说

构建,他能做什么操作,取决于你安装了什么样的插件,执行相应功能的构建操作

本次选择构建执行脚本,选择execute shell

技术图片

输入一个简单的命令,先看一下效果和目录做了哪些改变

构建后操作,先不做配置

点击保存!回到主页面

技术图片

点击“立即构建”,执行 job 的构建任务,我们的 job 就是执行一条 linux 命令

技术图片

点击下拉菜单的“console output”在上面的控制台输出内容中,

我们可以看到 job 执行时的当前工作目录为 Jenkins 主目录+workspaces+以 job 名称命名的文件夹,知道这一点对于我们后面写脚本执行部署任务时非常重要。

我们也可以通过命令行进行确认,在目录下多了一个workspace

[root@jenkins jenkins]# cd workspace/
[root@jenkins workspace]# ll
total 0
drwxr-xr-x 2 jenkins jenkins 6 Mar 20 20:58 My-free-Style-job
[root@jenkins workspace]# cd My-free-Style-job/
[root@jenkins My-free-Style-job]# ll
total 0   目录下是空的,因为没有做其他操作,

在jobs下也多了很多东西,构建的内容、历史等都在里面生成了

而且我们进一步也可以看到 job 主页面,工作空间所对应的位置也是此目录。

我们再构建中添加一条创建文件的命令,并观察变化

在创建之后,我们点击工作空间,会看到多了一个文件,就是我们刚刚创建的

技术图片

通过这个例子,我们可以联想到,我们可以使用 Jenkins 执行任何 linux 命令,

这也就是我们前面讲的要注意 Jenkins 启动用户的配置,

如果是 root 用户启动的 Jenknis,那 Jenkins 的安全 及权限配置一定要做好控制。

我们在学习初期,为了节省时间,可以使用 root 用户启动jenkins。

链接gitlab获取仓库代码

1、在10.0.0.63(GitLab)服务器上,倒入了一个完整的项目,现在是有组、用户、项目代码

  通过的URL导入在码云上找的Html代码项目(用的https)

2、在10.0.0.64(Jenkins)服务器上,做好了一个Job

接下来,将gitlab上的代码拉取到jenkins上

技术图片

开始复制到jenkins的job中的源码管理中

技术图片

因为我们使用的 SSH 方式连接仓库,所以需要配置SSH 认证, 这台机子的 root用户的公钥在 Gitlab 上的 dev 用户,为什么我们这里还需要认证?下面我们来查看一下Jenkins 服务的启动用户, 我们已经改成root了(/etc/sysconfig/jenkins)

jenkins是以root用户启动的,我们需要在jenkins上使用root用户创建秘钥,配置在gitlab上就能打通,或者当jenkins是以jenkins的user启动的,我们就需要在jenkins上使用jenkins创建秘钥,配置在gitlab上。

在我们使用了root用户配置完之后,再实验jenkins用户的时候,会报错!

通过排除和查看目录,发现,在我们设置为root用户后,config.xml的权限变成了root.root

所以在切换回jenkins之后,会报错,在日志中显示,没有访问config.xml的权限

将文件权限修改成jenkins.jenkins就可以了

然后还有一点问题,root用户的公钥已经不能用了,这个时候,在管理页面添加私钥证书,去和gitlab上的公钥配对

技术图片

OK! 基本上在配置的时候后,就这两种错误!

设置完拉取分支,然后保存!!

也可以用commit ID拉取

技术图片

 但是,我们在一个job下频繁的修改用户,会导致错误,因为jenkins无法操作root用户的文件

最好不要这么操作!

最后,执行以下立即构建,代码就会被拉到工作目录下!

利用linux脚本实现部署

配置文件的变更

一般我们在获取源代码以后,要对源代码做一些配置。把源代码发到我们对应的环境里面去。

有一些最基本的操作,研发、测试、生产环境的配置文件都是不一样的。

最适合方法:把测试、生产环境正确的测试文件,保存一份在Linux某个文件中,或者保存在仓库上,建议最好也放在git上,这样每次更改都会有记录。

然后,在jenkins中再创建一个job拉取配置文件。

写一个脚本,把正确的文件覆盖源代码中的配置文件。

怎么发送到服务器上

是打一个包,还是,scp * ,一个文件一个文件。

为了节省性能,节省IO,网络IO/磁盘IO。所以要打包发送,而且,压缩后的文件更小,但是节省IO才是最重要的。

发布时使用软连接,不要复制,黏贴

因为,省时间

安装httpd服务

在一台服务器上安装apache

[root@xiaodao ~]# yum install -y http

配置ssh免密登陆

因为我们要使用脚本将 jenkins 上的程序代码推送到 web-01服务器 上,所以需要配置jenkins 到 web-011的 ssh 免密码登录。()

httpd也安装在了gitlab上,将配置文件(/etc/httpd/conf/httpd.conf )中的listen 改为 8808,避免冲突

[root@jenkins ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.63

编写部署脚本

流程是这样的:

1、拿到源码,处理配置文件,图片等....

2、打包

3、发到目标服务器(apache的默认网站目录在/var/www/html下)

4、解包

5、使用软连接的方式发布

注意:在我们多次提交后,会覆盖之前发送过来的包,需要采用迭代的方式,

[root@jenkins /server/tools]# vim deploy.sh
#!/bin/bash
# 定义文件名,形成迭代文件名
web_name=web-$(date -%F)-(($RANDOM)+10000)
# 定义web服务器名,做一个通用的脚本
host=$1
# 工作目录的名字,以区分推送不同的项目,做一个通用的脚本
job_name=$2
# 切换到源码目录下,打包
cd  /var/lib/jenkins/workspace/$(job_name) && tar czf /opt/$(web_name).tar.gz ./*
# ssh到远程主机,切换到www目录,创建源码目录
ssh $(host) "cd /var/www && mkdir $(name)"
# 将源码发送到远程主机
scp /opt/$(web_name).tar.gz $(host):/var/www/$(web_name)
# ssh远程主机,切换到项目源码目录下,
ssh $(name) "cd /var/www/$(web_name) && tar xf $(web_name).tar.gz && rm -f $(name).t
ar.gz"
# 做软连接,删除原来的html软连接
ssh $(name) "cd /var/www && rm -rf html && ln -s /var/www/$(name) /var/www/html"

~                                                                                   
"deploy.sh" 18L, 839C written               

Jenkins 配置构建

在配置中,写入命令

技术图片

或者可以直接调用jenkins的全局变量

技术图片

保存,然后执行立即构建

编写脚本的时候一定要细心,注意语法和关键字

访问10.0.0.63:8808 ,成功构建

技术图片

Git push触发自动构建

在上面的 job 中,我们已经成功实现了将 Gitlab 中 monitor 仓库的代码部署到 httpd服务中,但是每次部署需要我们手动去点击“立即构建”,下面我们将实现当 Gitlab 收到push 请求后,就触发 Jenkins 构建,将仓库的变化部署到 httpd 服务中。

Jenkins job 配置构建触发器

回到 My-freestyle-job 的配置页面,下拉到构建触发器部分

选择Build when a change is pushed to GitLab. GitLab CI Service URL: http://10.0.0.64:8080/project/My-free-Style-job

技术图片

点右下角的高级

技术图片

完成,保存

Gitlab仓库配置webhooks

进入 Gitlab 中 我们的源码 仓库的设置页面,

点击Settings---Intergrations

技术图片

点击最下面的 Add webhooks,完成配置。

可以测试一下最下面的test选项,我们在 jenkins job 主页面看到构建任务被触发。
接着我们将仓库克隆到客户端,在客户端测试触发 push 操作

Gitlab 收到本次推送的内容,

Jenkins 对应的 job 已经触发构建 。

网站 index.html 内容被更新

同时我们在 jenkins 中 job 主页面的“最新修改记录”部分可以看到我们的修改日志。

小公司的测试和审批可能没有那么完善和高效,所以自动上线,最好不要在生产环境中使用,一定要人工介入。保证没有问题

配置构建后操作

构建完成后,jenkins 可以把构建的结果反馈给 Gitlab,这样在 Gitlab 上就可以查看每一次 push 后构建的执行结果。

首先在 Jenkins 上配置,可以访问 Gitlab,打开 jenkins 系统管理?系统设置页面,下拉找到 Gitlab 部分,

配置构建后通知Gitlab

Jenkins首页------系统设置------系统设置(右边栏第一个)------往下拉,找到Gitlab

技术图片

添加认证 ,这个认证呢,是为了访问10.0.0.63上面的gitlab的

在Gitlab的Usersttings------Access Token------创建token

技术图片

将获得的token,复制,帖到jenkins的指定位置

技术图片

ID:gitlab

Discription:gitlab

添加,完成

然后下面有一个测试按钮,点击,Success!

保存!

jenkins的Job配置下增加构建后操作

技术图片

保存,执行试验一下,构建后查看gitlab是不是收到状态通知

这样,我们就可以在gitlib中看到构建状态,点击绿钩就可以更多状态信息

会直接连接到jenkins中,

不用在登陆jenkins去查看了

配置构建发送邮件

每次执行完构建任务后,我们都可以通过邮件来通知相关人员构建的执行情况,具体配置如下:
全局配置
在 jenkins 系统管理—>系统设置,
在系统设置中找到 Jenkins Locaction 填好 JenkinsURL 跟系统管理员的邮件地址,注意必填。

 技术图片

下拉到最下面“邮件通知”部分,

 技术图片

 

注 1、邮箱跟最开始设置的管理员邮箱是一致的,2、密码根据您使用的邮箱进行设置,163、QQ 邮箱,都使用授权码,而不是您的邮件密码。

成功!我们可以收到测试的邮件

Job 邮件配置
进入 job 配置页面,下拉至构建后操作部分,选择两项中的一项

  1、选择E-mail Notifacation

  2、Editable E-mail Notifacation

技术图片

E-mail Notification 选项配置比较简单

技术图片

当构建失败后,会发邮件通知

 

Editable Email Notification 配置

 技术图片

Jenkins创建Maven项目

什么是Mavenue

Maven 是一个项目管理和综合工具。

Maven 提供了开发人员构建一个完整的生命周期框架。

开发团队可以自动完成项目的基础工具建设,Maven 使用标准的目录结构和默认构建生命周期。

Maven 简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。

Maven 增加可重用性并负责建立相关的任务。

Maven 项目的结构和内容在一个 XML 文件中声明,pom.xml 项目对象模型(POM),这是整个 Maven 系统的基本单元。

用来管理项目的构建,相关性和文档。最强大的功能就是能够自动下载项目依赖库

 推荐书名《Maven时代》-徐小斌作品

真的要使用Maven,应该是,首先要在Linux命令行下就行执行和使用

Jenkins只是插件式的用工具调用本地的Maven

Centos7下安装Maven

安装JDK

此时已安装好,就在安装jenkins的服务器上安装

获取Maven安装文件

官网:http://maven.apache.org/download.cgi
清华镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/
[root@jenkins ~]# cd /server/tools/
[root@jenkins /server/tools]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

安装MVen

下载的是一个二进制文件包,解压后直接使用的

[root@jenkins /server/tools]# tar xf apache-maven-3.3.9-bin.tar.gz     
[root@jenkins /server/tools]# mv apache-maven-3.3.9 /application/
[root@jenkins /application]# ln -s /application/apache-maven-3.3.9/ /application/maven
[root@jenkins /application]# /application/maven/bin/mvn -v    执行命令,查看maven版本
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /application/maven
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_121/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"

配置Maven

编辑 /etc/profile 文件 , 在末尾添加 export PATH=/usr/local/apache-maven-3.3.9/bin/:$PATH ,将 maven 命令加入系统环境变量。 然后就可以直接使用mvn了

[root@jenkins /application]# source /etc/profile
[root@jenkins /application]# mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /application/apache-maven-3.3.9
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_121/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"

认识Maven安装目录

安装完成后,maven 的安装目录结构如下:

[root@jenkins /application/maven]# ll
total 32
drwxr-xr-x 2 root root    97 Mar 24 06:17 bin
drwxr-xr-x 2 root root    42 Mar 24 06:17 boot
drwxr-xr-x 3 root root    63 Nov 11  2015 conf
drwxr-xr-x 3 root root  4096 Mar 24 06:17 lib
-rw-r--r-- 1 root root 19335 Nov 11  2015 LICENSE
-rw-r--r-- 1 root root   182 Nov 11  2015 NOTICE
-rw-r--r-- 1 root root  2541 Nov 11  2015 README.txt


bin:该目录包含了 mvn 运行的脚本,这些脚本用来配置 java 命令,准备好 classpath
和相关的 Java 系统属性,然后执行 Java 命令。其中 mvn 是基于 Linux 平台的脚本,mvn.bat或者mvn.cmd是基于 Windows 平台的脚本。m2.conf 是 配置m2目录
boot:该目录只包含一个文件,该文件是一个类加载器框架,Maven 使用该框架加载自己的类库。
conf:该目录包含了一个非常重要的文件 settings.xml。用于全局定义 Maven 的行为。也可以将该文件复制到~/.m2/目录下,在用户范围内定制 Maven 行为。
Lib:该目录包含了所有 Maven 运行时需要的 Java 类库。

常用maven命令

网盘中准备了一个Hello world项目,上传

首先我们创建一个名为 hello-world 的 Maven 项目,项目的目录结构如下

[root@jenkins /server/tools/hello-world]# tree .
.
├── pom.xml  是一个对象模型,所有项目的配置都在里面,若无此,将无法构建
└── src
    ├── main
    │   └── java
    │       └── com
    │           └── juvenxu
    │               └── mvnbook
    │                   └── helloworld
    │                       └── HelloWorld.java
    └── test
        └── java
            └── com
                └── juvenxu
                    └── mvnbook
                        └── helloworld
                            └── HelloWorldTest.java

13 directories, 3 files

我们在此项目的基本上测试常用的 maven 命令
mvn clean 命令用于清理项目生产的临时文件,一般是模块下的 target 目录

mvn package 在项目根目录下执行命令用于项目打包,会在模块下的 target 目录生成 jar 或者 war 等文件 。他会自动去找依赖包,先去m2仓库找,再去中心仓库找,后面讲建立私库。找到以来文件开始下载,保存在了根目录下的target下,

[root@jenkins /server/tools/hello-world/target]# ll
total 8
drwxr-xr-x 3 root root   17 Mar 24 07:05 classes    
-rw-r--r-- 1 root root 3129 Mar 24 07:07 hello-world-1.0-SNAPSHOT.jar  jar包是能执行的
drwxr-xr-x 2 root root   28 Mar 24 07:07 maven-archiver
drwxr-xr-x 3 root root   35 Mar 24 07:04 maven-status
-rw-r--r-- 1 root root 2871 Mar 24 07:07 original-hello-world-1.0-SNAPSHOT.jar
drwxr-xr-x 2 root root  125 Mar 24 07:06 surefire-reports
drwxr-xr-x 3 root root   17 Mar 24 07:05 test-classes  测试的结果

mvn test 命令用于测试,用于执行src/test/java/ 下的测试用例,

使用-Dmaven.test.skip=true参数可以跳过测试。

mvn install 命令用于模块安装,将打包好的 jar/war 文件复制到你的本地仓库中,供其他模块使用

mvn deploy  用于部署到m2本地文件

Maven仓库

在 Maven 中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。

Maven 在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。(仓库就是存放依赖和插件的地方)任何的构件都有唯一的坐标,Maven 根据这个坐标定义了构件
在仓库中的唯一存储路径
Maven 仓库分为两类:本地仓库和远程仓库

远程仓库又可以大致分为以下三类:

中央仓库,这是 Maven 核心自带的远程仓库,它包含了绝大部分开源的构件;

私服是一种特殊的远程仓库,一般是为了节省带宽和时间,在企业局域网内架设的一个私有仓库服务器(如nexus)用其代理所有外部的远程仓库,内部的项目还可以部署到私服上供其他项目使用;
还有就是其他的公开的远程仓库,常见的有 Java.net Maven 库、JBoss Maven 库等。

默认配置下,Maven 根据坐标寻找构件的时候,首先他会查看本地仓库,

如果本地仓库存在,则直接使用;

如果本地仓库不存在,则 Maven 就会去远程仓库查找,

存在则先下载到本地仓库使用,不存在 Maven 就会报错。

本地仓库

顾名思义,就是 Maven 在本地存储构件的地方。

maven 的本地仓库,在安装 maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。

maven 本地仓库的默认位置:无论是 Windows 还是 Linux,在用户的目录下都有一个.m2/repository/的仓库目录,这就是Maven 仓库的默认位置。

这个可以通过修改.m2/settings.xml 文件(不存在可以创建)或者maven 安装目录/conf/settings.xml 进行配置。
在 settings.xml 文件中,设置 localRepository 元素的值为想的仓库地址即可

<settings>
    <localRepository>/opt/maven_repository</localRepository>
</settings>


通过我们建议修改.m2 目录下的 setting.xml 文件,修改只针对用户。

远程仓库

说到远程仓库先从最核心的中央仓库开始,中央仓库是默认的远程仓库,

maven 在安装的时候,自带的就是中央仓库的配置,所有的 maven 项目都会继承超级 pom,具体的说,包
含了下面配置的 pom 我们就称之为超级 pom

<repositories>
    <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>http://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>            


中央仓库包含了绝大多数流行的开源 Java 构件,以及源码、作者信息、SCM、信息、许可证信息等。

一般来说,简单的 Java 项目依赖的构件都可以在这里下载得到。
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。
Maven 私服的 个特性:
1.节省自己的外网带宽:减少重复请求造成的外网带宽消耗
2.加速 Maven 构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低
3.部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部 maven 项目使用
4.提高稳定性,增强控制:Internet 不稳定的时候,maven 构建也会变的不稳定,一些私服软件还提供了其他的功能
5.降低中央仓库的负荷:maven 中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力
当前主流的 maven 私服:1.Apache 的 Archiva、2.JFrog 的 Artifactory、3.Sonatype的 Nexus

配置使用远程仓库

在平时的开发中,我们往往不会使用默认的中央仓库,默认的中央仓库访问的速度比较慢,访问的人或许很多,有时候也无法满足我们项目的需求,可能项目需要的某些构件中央仓库中是没有的,而在其他远程仓库中有,如 JBoss Maven 仓库。

这时,可以在 pom.xml中配置该仓库,代码如下:

<!-- 配置远程仓库 -->
<repositories>
  <repository>
    <id>jboss</id>
    <name>JBoss Repository</name>
    <url>http://repository.jboss.com/maven2/</url>  
  <releases>
    <enabled>true</enabled>
    <updatePolicy>daily</updatePolicy>
  </releases>
  <snapshots>
    <enabled>false</enabled>
    <checksumPolicy>warn</checksumPolicy>
  </snapshots>
  <layout>default</layout>
  </repository>
</repositories>

 
repository:在 repositories 元素下,可以使用 repository 子元素声明一个或者多个远程仓库。
id:仓库声明的唯一 id,尤其需要注意的是,Maven 自带的中央仓库使用的 id 为 central,如果其他仓库声明也使用该 id,就会覆盖中央仓库的配置。
name:仓库的名称,让我们直观方便的知道仓库是哪个,暂时没发现其他太大的含义。
url:指向了仓库的地址,一般来说,该地址都基于 http 协议,Maven 用户都可以在浏览器中打开仓库地址浏览构件。
releases 和 snapshots:用来控制 Maven 对于发布版构件和快照版构件的下载权限。需要注意的是 enabled 子元素,该例中 releases 的 enabled 值为 true,表示开启 JBoss 仓库的发布版本下载支持而   snapshots 的 enabled 值为 false,表示关闭 JBoss 仓库的快照版本的下载支持。根据该配置,Maven 只会从 JBoss 仓库下载发布版的构件,而不会下载快照版的构件。
layout:元素值 default表示仓库的布局是 Maven2及 Maven3的默认布局,而不是 Maven1的布局。基本不会用到 Maven1 的布局。
其他:对于 releases 和 snapshots 来说,除了 enabled,它们还包含另外两个子元素updatePolicy 和 checksumPolicy。

  元素 updatePolicy 用来配置 Maven 从远处仓库检查更新的频率,默认值是 daily,表示 Maven 每天检查一次。

  其他可用的值包括:never-从不检查更新;always-每次构建都检查更新;interval:X-每隔 X 分钟检查一次更新(X 为任意整数)。
  元素 checksumPolicy 用来配置 Maven 检查校验和文件的策略。当构建被部署到 Maven仓库中时,会同时部署对应的检验和文件。在下载构件的时候,Maven 会验证校验和文件,如果校验和验证失     败,当 checksumPolicy 的值为默认的 warn 时,Maven 会在执行构建时输出警告信息,其他可用的值包括:fail-Maven 遇到校验和错误就让构建失败;ignore-使Maven 完全忽略校验和错误

利用Nexus搭建私有Maven库

Nexus介绍

Nexus 是一个强大的 Maven 仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
Nexus 在代理远程仓库的同时维护本地仓库,以降低中央仓库的负荷,节省外网带宽和时间。
Nexus 是一套“开箱即用”的系统不需要数据库,它使用文件系统加 Lucene 来组织数据。
Nexus 使用 ExtJS 来开发界面,利用 Restlet 来提供完整的 REST APIs,通过 m2eclipse与 Eclipse 集成使用。
Nexus 支持 WebDAV 与 LDAP 安全身份认证。
Nexus 还提供了强大的仓库管理功能,构件搜索功能,它基于 REST,友好的 UI 是一个extjs 的REST 客户端,它占用较少的内存,基于简单文件系统而非数据库

安装JDK

最好安装在单独的服务器上,效率高,传输快,不受其他服务的影响。

创建新的虚拟机10.0.0.65  nexus

获取Nexus安装包

下载地址:https://www.sonatype.com/download-oss-sonatype

访问链接找到Unix/Linux的版本,右键复制链接,使用 wget命令 下载即可

安装Nexus

软件包解压后即可使用

解压后会有两个项目

drwxr-xr-x 9 root root       163 Mar 25 03:29 nexus-3.13.0-01

drwxr-xr-x 3 root root        20 Mar 25 03:30 sonatype-work

将文件移动到 自定义安装软件的目录,我习惯的是 /application下

做软连接

ln -s /application/nexus-3.13.0-01/ /application/nexus

启动nexus

[root@jenkins /application/nexus]# bin/nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus

也可以使用run,能在屏幕输出过程

上面启动成功后会警告不要使用 root 用户启动,这里可以新建一个用户,也可以指定root 用户启动,使他不出现警告,下面配置指定 root 用户启动,编辑 bin 目录下的 nexus.rc文件,

修改内容为:run_as_user="root"

默认的端口是8081

默认的账号密码时admin;admin123

 

配置Maven项目使用Nexus仓库

在 maven 的 setting.xml 文件中配置私服配置,这种方式配置后,所有本地使用该配置的maven 项目的 pom 文件都无需配置私服下载相关配置
在<profiles></profiles>之间加入下面的配置

<profile>
  <id>my-nexus</id>
  <repositories>
  <!-- 私有库地址-->
    <repository>
      <id>nexus</id>
      <name>nexus</name>
      <url>http://10.0.0.65:8081/repository/maven-public/</url>
      <snapshots> 快照库
        <enabled>true</enabled>
      </snapshots>
      <releases> 版本库
        <enabled>true</enabled>
      </releases>
    </repository>
  </repositories>
  <pluginRepositories>
  <!--插件库地址-->
    <pluginRepository>
    <id>nexus</id>
    <url>http://10.0.0.65:8081/repository/maven-public/</url>
    <releases>
      <enabled>true</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>


<settings></settings>之间加入下面的配置,激活启用使用上面的配置

<activeProfiles>
    <activeProfile>my-neuxs</activeProfile>
</activeProfiles>


注:profile 名字要对应


在<mirros></mirros>镜像之间加入如下配置

<mirror>
  <id>nexus-myself</id>
  <!--*指的是访问任何仓库都使用我们的私服-->
  <mirrorOf>*</mirrorOf>
  <name>Nexus myself</name>
  <url>http://10.0.0.65:8081/repository/maven-public/</url>
</mirror>


配置完成后,删除原来的m2后,当我们再次执行 mvn 命令时,下载构件的地址变为我们的私服地址

我们的私服也缓存了相应的构件在本地

创建Maven Job

1、在 Gitlab 创建一个 java 的代码仓库,我们把前面在命令使用的 helloword 项目初始化为一个 git 仓库,然后 push 到我们的 Gitlab 上(具体方法请参考前面相关内容)。

2、在 jenkins 配置 maven:打开系统管理—>全局工具配置页面,下拉新增一个 maven 配置。


2、回到 Jenkins 主页面,点击“新建 Item”进入创建 Job 页面,


3、输入 Job 名称,选择 maven 类型,点击确认按钮,创建 job,进入 job 配置页面,

通用部分配置“丢弃旧的构建”


源码管理配置从 git 仓库获取我们 helloword 仓库的代码


配置输入要执行的 maven 命令,保存配置,返回 job 主页面,执行构建。

在“工作空间”我们可以看到构建后的产物。

Jenkins 创建Popeline项目

Jenkins Pipeline简介

Jenkins pipeline 是 Jenkins 2.0 的精髓,

是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。

简单来说,就是一套运行于 Jenkins 上的工作流框架,

将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。

Pipeline 的实现方式是一套 Groovy DSL,任何发布流程都可以表述为一段 Groovy 脚本

并且 Jenkins 支持从代码库直接读取脚本,从而实现了 Pipeline as Code 的理念。

Pipeline的基本概念和Jenkinsfile

Pipeline的几个基本概念

Node: 一个 Node 就是一个 Jenkins 节点, 可以是 Master, 也可以是 Slave, 是 Pipeline中具体 Step 的运行环境。
Stage:一个 Pipeline 有多个 Stage(阶段) 组成,每个 Stage 包含一组 Step。注意一个 Stage可以跨多个 Node 执行,即 Stage 实际上是 Step 的逻辑分组。
Step:是最基本的运行单元,可以是创建一个目录、从代码库中 checkout 代码、执行一个 shell 命令、构建 Docker 镜像、将服务发布到 Kubernetes 集群中。Step 由 Jenkins和 Jenkins 各种插件提供。

Jenkinsfile 语法

Jenkins Pipeline 支持两种语法,

一种 Declarative Pipeline(声明式),

一种 ScriptedPipeline(脚本式)。

声明式的 Pipeline 限制用户使用严格的预选定义的结构是一种声明式的编程模型,对比脚本式的 Pipeline 学习起来更加简单;

脚本式的 Pipeline 限制比较少,结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。

所以我们学习使用声明式的方式编写 jenkinsfile。一般来说 jenkinsfile 会被放在代码库的根目录下。当然也可以在 Web 页面定义。下面是两种不同方式的 jenkinsfile 示例
Jenkinsfile (声明式)

pipeline {
  agent any 紧跟着,必须是它,any指定节点
     stages {     stage(‘Build‘) {       steps {         echo ‘Building..‘       }     }   stage(‘Test‘) {     steps {       echo ‘Testing..‘     }   }       stage(‘Deploy‘) {     steps {       echo ‘Deploying....‘     }   }   } }


前面我们说过,声明式的 Pipeline 有严格的预定义格式结构,

最外层必须是 pipeline{},紧接着是 agent 指示 Jenkins 分配一个执行器和工作空间来执行下面的 Pipeline,

stages和 steps 是声明式 Jenkinsfile 必须的,所有的 stage 必须要定义在 stages 里,

每一个 stage下的 step 要定义在一个 steps 里
Jenkinsfile (脚本式)

node {
  stage(‘Build‘) {
  //
  }
  stage(‘Test‘) {
  //
  }
  stage(‘Deploy‘) {
  //
  }
}


在脚本式 jenkinsfile 里,你可以定义一个 node 或者多个 node 块,然后在 node 块里定义你的stage,在 stage 里定义你的 step 即可。

Pipeline Job示例

通过web页面创建爱你jenkinsfile

1、登录到 jenkins 主页面,点击左侧菜单栏的 New Item 新建项目

2、进入到新建 Job 页面,输入 job 名称,在下面选择 Pipeline 类型,然后点击 OK。

3、打开 Pipeline 配置页面, 点 Pipeline 选项卡, 下拉到 pipeline (流水线)部分,选择 pipeline script,在页面定义 jenkinsfile 的方式,在脚本框输入下面的内容

pipeline {
  agent any
  stages {
    stage(‘Stage 1‘) {
      steps {
        echo ‘Hello world!‘
      }
    }
  }
}


保存后回到 Job 主页面,点击“立即构建”,
4、构建执行完成后,在页面的右侧以图形的形式显示 pipeline 的结构,点击对应的位置可以查看构建执行的情况。
5、在构建历史处,点击#1 查看这次构建的运行情况,点击“console output”可以看到 Pipeline 的详细运行情况。

通过scm获取jenkinsfile

1、首先我们在 gitlab 上的 monitor 仓库的根目录下创建一个 Jenkins 文件,文件的内容为:

pipeline {
  agent any
  stages {
    stage(‘Stage 1‘) {
    steps {
      echo ‘Hello world!‘
       }
     }
  }
}


2、接着我们在 Jenkins 新建一个 pipeline job,命名为 My-pipeline-job01,前 2 步,同上一个示例一样,在 My-pipeline-job01 的配置页面,点击 Pipeline 选项卡,下拉到pipeline 部分,选择从 scm 获取 pipeline script,
3、进入到 scm 配置页面,选择从 git 仓库获取
4、进入到 git 仓库配置页面,输入仓库地址,配置认证,选择分支等,然后点击保存。
5、保存配置后,回到 Job 主页面,执行“立即构件”,在”console output”中,我们可以看到,首先从 gitlab 仓库获取了所有的代码文件, 然后识别到jenkins文件,执行文件中定义的构建任务。

Pipeline 语法生成器

不用自己写语法。

随着 Pipeline 一起发布的内建的文档,使得创建复杂的 Pipelines 更加容易。内建的文档可以根据安装在 Jenkins 实例中的插件,被自动生成和更新。

内建的文档可以通过链接被找到: localhost:8080/pipeline-syntax/。

假设你已经有了一个正运行在本地 8080 端口上的实例。同样的文档可以连接到这里,通过任何项目的左边菜单”Pipeline Syntax”

语法生成器是动态填充的,其中列出了可供 jenkins 使用的步骤,可用的步骤取决于安装的插件。
使用语法生成器生成步骤:
1、打开 Pipeline Syntax

2、在“示例步骤”下拉菜单中,选择需要的步骤。

 包含了构建过程所有的

3、输入所选择步骤需要的参数信息

4、点击“生成流水线脚本”生成脚本

使用Pipe实现monitor代码仓库的发布

1、在 Gitlab 在 monitor 仓库的根目录上添加 Jenkinsfile 文件,文件内容如下:

pipeline {
  agent any
  stages {
    stage(‘replace file‘) {
      steps {
        echo "replace config file use cp "
      }
    }
    stage(‘test‘) {
      steps {
        echo "unit test "
      }
    }
    stage(‘package‘) {
      steps {
        sh ‘tar czf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./git --exclude=Jenkinsfile‘
      }
    }
    stage(‘deploy‘) {
      steps {
        sh ‘ssh 10.0.0.11 "cd /var/www && mkdir web-${BUILD_ID}"‘
        sh ‘scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.11:/var/www/web-${BUILD_ID}‘
        sh ‘ssh 10.0.0.11 "cd /var/www/web-${BUILD_ID} && tar xf web-${BUILD_ID}.tar.gz &&rm -f web-${BUILD_ID}.tar.gz"‘
        sh ‘ssh 10.0.0.11 "cd /var/www && rm -rf html && ln -s /var/www/web-${BUILD_ID}" /var/www/html‘
      }
    }  
    stage(‘test‘) {
      steps {
        echo "deploy after test "
      }
    }
  }
}

 
此 jenkinsfile 包括五个 stage,分为 replace file、test、package、deploy,对于非编译项目,我们一般包括这五个阶段。
2、在 jenkins 上创建一新的 Job,job 名称为 monitor-web,类型为 pipeline,
3、配置 gitlab 自动触发构建(具体请参与前面部分相关内容)。
4、配置从 scm 获取 jenkins,
5、保存配置,返回 job 主页面,执行构建。

我们看到我们部署已经成功。

Jenlins权限管理

Jenkins 本身自带安全管理的功能,但是一般情况下很少去使用,更多是使用插件的方式进行更加灵活的处理。
Jenkins 的权限管理需要依赖 Jenkins 的权限管理插件。通过配置插件 role-base,可以很方便给不同用户不同 job 的管理和执行权限。

插件的安装与配置

在系统管理、插件管理中搜索 role-base 插件,可以进行安装,

具体安装过程就不再叙述,大家可以查看我们插件管理部分的内容。

插件安装完成之后,我们需要在“配置全局安全”中启用插件,打开“系统管理->全局安全配置”页面

选择授权策略为“Role Based Strategy”,保存退出后,在系统管理页面出现一个角色管理工具:

点击进入之后,就可以对我们的用户进行权限配置。

创建用户

我们来创建一个 dev 用户,在“系统管理”中,选择“管理用户”,

选择右侧的新建用户

输入用户名、密码等信息

点击“新建用户”完成用户创建。

角色管理

在“系统管理”,选择“Manage and Assign Roles”进入角色管理页面,

点击“Manage Role”,创建一个全局的 dev 角色,授权只读的权限


在“角色管理页面”,选择“Assign Roles”,将 dev 用户赋予 dev 角色

需要注意的是,之前 admin 或 root 的权限选项不要移除,否则这些用户可能无法登录。
使用 dev 用户登录,发现没有任何 job,因为还没有为 dev 用户配置查看的 job 的权限

回到角色管理页面,添加一个 dev 的 job 角色,使用正则表达式匹配 dev 角色可以管理的 job 的名称


在“Assign Roles”页面,将刚才创建的 job 角色配置给 dev 用户。


此时,我们再次使用 dev 用户登录 jenkins,即可以看到匹配到的 job,而且可以执行你配置的操作 。

Jenkins备份、升级、迁移

升级

下载新版 Jenkins.war 文件,替换旧版本 war 文件,重启即可。
Jenkins.war 文件的位置一般为/usr/lib/jenkins/Jenkins.war。

迁移、备份

Jenkins 的所有的数据都是以文件的形式存放在 JENKINS_HOME 目录中。

所以不管是迁移还是备份,只需要操作 JENKINS_HOME 就行。

建议将 JENKINS_HOME 打包后在拷贝, windows上可以用 zip, rar 等,Linux 上有 zip,tar 等。

然后将打包的文件解压到新的 JENKINS_HOME目录就行了。

使用thinbackup插件备份

安装插件

安装 ThinBackup 插件,可能 参考前面插件管理部分。

配置插件

手动备份

测试从备份恢复

我们删除/var/lib/jenkins/job 目录下的 my‐freestyle‐job 目录,

然后我们使用刚才的备份恢复

恢复完成后,我发现刚才删除的目录又回来了

 

Jenkins

标签:变更   保留   policy   开发   安装与配置   ant   程序   公司   httpd服务   

原文地址:https://www.cnblogs.com/bubu99/p/12275454.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!