Jenkins 使用学习笔记
Posted liangww
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jenkins 使用学习笔记相关的知识,希望对你有一定的参考价值。
一、简介
1. Make工具
这个工具是最最原始的工具了,在linux下编过程序,看过比较大的c/c++代码的人应该都听说过这个工具(Windows下对应的工具为nmake)。它负责组织构建的过程,也就是负责指挥编译器如何编译,连接器如何连接,最后生成一个可用的文件。
2. Ant工具
但是有人觉得make工具的很难使用,他的语法很难理解,就发明了ant
3. Maven工具
Maven像make一样是个构建(build)工具,Maven工具是对ant工具的进一步改进(这么说不太准确,但是可以这么理解)。在make工具中,如果我们要编译某些源文件,我们肯定首先要安装编译器等工具,但是有时候需要不同版本的编译器,如果把每个包都下载下来,在makefile中进行配置制定,需要的包非常多,很难管理,于是人们发明了Maven工具。Maven使用配置文件pom.xml对环境进行配置,例如设定编译器的版本,设定所需支持包的URL,这样maven就可以自动去下载所需的包。这样如果需要对构建环境进行改变时,直接改变pom文件就可以了,maven会自动网络上下载配置的包。Maven可以利用一些别的工具,实现对编译结果的统计,对源代码的检查,对于代码的测试等。
4. Jenkins工具
其实Maven还是不够强大。Maven可以控制编译,控制连接,可以生成各种报告,可以进行代码测试。可是如何控制这个流程呢?先编译还是先连接?先进行代码测试,还是先生成报告?这个工具就是Jenkins。Jenkins能够对流程进行控制,对能够对各个阶段生成的各种结果进行综合,以图表的形式呈现出来。但是不同的工具生成不同格式的结果,Jenkins如何让这些结果呈现出来?这就是jenkins插件,Jenkins插件使maven中用到的各种工具生成的结果能够在Jenkins中呈现出来。
jenkins是一个广泛用于各种项目的"自动化"编译、打包、分发部署。jenkins本身是用java语言开发的,所以安装jenkins的机器至少要有jdk。jenkins可以很好的支持各种语言(java, c#, php等)的项目构建,也完全兼容ant、maven、gradle等多种第三方构建工具,同时跟svn、git能无缝集成,也支持直接与知名源代码托管网站github、bitbucket直接集成。Jenkins默认情况下可以实现项目更新(通过SVN)和项目发布(通过MAVEN)
二、Maven
Maven是一个项目管理工具,它包含了一个项目对象模型,一组标准集合,一个项目生命周期,一个依赖管理系统。Maven可以管理项目的整个生命周期,包括编译,构建,测试,发布,报告等等。目前Apache下绝大多数项目都已经采用Maven进行管理。
Maven的基本功能
·构建:比如生成class、jar、war或者ear文件
·生成文档:比如生成javadoc、网站文档
·生成报告:比如junit测试报告
·生成依赖类库:生成文档,说明项目多其他软件的依赖
·有关SCM:SCM(Software Configuration Management),软件配置管理,比如版本控制,比如bug管理等等
·发布:生成供发布的分发包,比如生成Struts2的分发包,供提交给用户使用
·部署:比如,web应用程序,自动部署到指定的服务器上
maven环境搭建
Jdk 1.5以上java开发环境。
Eclipse IDE 一个。
Maven 3.0.3下载地址: http://maven.apache.org/docs/3.0.3/release-notes.html
第一步:配置maven环境
将下载文件解压,然后设置maven环境
如果你配置过jdk的话,这里对你应该不难。如我的maven环境为:F:\\maven\\apache-maven-3.0.3
我的电脑-----属性----高级-----环境变量-----环境变量-----新建
变量名:M2_HOME
变量值:F:\\maven\\apache-maven-3.0.3
找到path
在环境变量值尾部加入:;%M2_HOME%\\bin;---前面注意分号
当然,你也可以直接在path 路径下加入:;F:\\maven\\apache-maven-3.0.3\\bin 只是上面的方式更优雅一点。
我新建立
打开命令提示符(开始---运行---cmd),检查我们的java环境和maven环境是否有误。
第二步:修改仓库位置
修改我们仓库地址,仓库用于存放我们项目所依赖的所有jar包。我的仓库路径:F:\\maven\\repo----这个路径是我自己创建,你可以将路径创建在任何位置。我们打开…\\apache-maven-3.0.3\\conf\\目录下的setting.xml文件,设置成我们创建的仓库路径
下面我们用一个命令验证一下。打开命令提示符,输入:mvn help:system 该命令会打印出所有的java系统属性和环境变量。这些信息对我们日常的编程工作很有帮且。如果运行的过程中没有错误,打开我们仓库(F:\\maven\\repo)会发现里面多了一些文件。这些文件就是我们从maven的中央仓库下载到本地仓库的。
第三步:创建maven项目
创建一个我们自己的项目。
我们通过maven命令行方式创建一个项目
mvn archetype:create -DgroupId=com.chongshi.test -DartifactId=hello -DpackageName=com.chongshi.test -Dversion=1.0
因为是第一次构建项目,所有依赖的jar包都要从maven的中央仓库下载,所以需要时间等待。等以后我们的本地仓库中积累了我们常用的jar包后,我们的开发将变得非常规范和方便。借助下载jar包的时间,我们来了解一下pom.xml文件。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.chongshi.test</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>hello</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Ø project:pom.xml文件中的顶层元素;
Ø modelVersion:指明POM使用的对象模型的版本。这个值很少改动。
Ø groupId:指明创建项目的组织或者小组的唯一标识。GroupId是项目的关键标识,典型的,此标识以组织的完全限定名来定义。比如,org.apache.maven.plugins是所有Maven插件项目指定的groupId。
Ø artifactId:指明此项目产生的主要产品的基本名称。项目的主要产品通常为一个JAR文件。第二,象源代码包通常使用artifactId作为最后名称的一部分。典型的产品名称使用这个格式: <artifactId>- <version>. <extension>(比如:myapp-1.0.jar)。
Ø version:项目产品的版本号。Maven帮助你管理版本,可以经常看到SNAPSHOT这个版本,表明项目处于开发阶段。
Ø name:项目的显示名称,通常用于maven产生的文档中。
Ø url:指定项目站点,通常用于maven产生的文档中。
Ø description:描述此项目,通常用于maven产生的文档中。
对于一个项目中只有下面的一部分是是我们需要关注的:
<groupId>com.chongshi.test</groupId>
<artifactId>hello</artifactId>
<version>1.0</version>
第四步:编译项目代码
我们的项目已经创建完成。但我们点开目录发现,它并不是我们eclipse所需要的项目目录格式。我们需要把它构建成我们eclipse可以导入的项目。
在命令提示符下进入到我们的创建的项目目录(F:\\maven\\hello)下,执行:mvn clean compile
Clean 告诉maven清理输入出目录target/,compile告诉maven编译项目主代码。
不要急,我们又需要一段时间来下载,相关jar包。^_^!第一次用maven要学会淡定。
项目是编译完了,但项目的目录结构还不是我们想要的eclipse的项目结构,是不能导入到eclipse中的。所以,还需要执行一个命令:mvn eclipse:eclipse
命令执行完成后就得我们需要的项目目录了。
第五步:导入eclipse工具
打开的我们的eclipse工具。
先配置maven仓库路径
Window----Perferences-----java-----Build Path-----Classpath Variables
New一个变量的类路径。
Name :M2_REPO 注意这个名字必须要大写。
Path :F:/maven/repo 点击“Folder…”找到有本地仓库的位置。
下面,可以导入我的hello项目了。Eclipse如何导入项目,我这里就不说了,如果你是个java开发人员的话。
第六步:包的更新与下载
打开项目发现我们junit 是3.8.1的,有点老了。那我想换成4.7的,如何通过maven的方式更换呢。其实,很简单,打开我们项目下的的pom.xml文件。
……
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
……
更改变,junit的版本号,然后重新执行:mvn eclipse:eclipse
Maven 中央仓库地址:http://search.maven.org/
假如,我们想下载一个struts 的jar包。在搜索框内搜索strruts ,会要列出中央仓库中的所有struts版本。
列表的格式与我们pom.xml配置文件的格式是对应的。
我们在pom.xml中加入:
<groupId>stuts</groupId>
<artifactId>struts-scripting</artifactId>
<version>1.0.1</version>
然后更新项目就可从中央仓库下载我们想要的任意jar包(必须是开源的包)
常用命令
mvn archetype:create 创建Maven项目
mvn compile 编译源代码
mvn deploy 发布项目
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvnjetty:run 启动jetty服务
mvntomcat:run 启动tomcat服务
mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类
生命周期
Maven的生命周期是为了对所有的构建过程进行了抽象了,便于统一。
clean(清理)
此生命周期旨在给工程做清理工作,它主要包含以下阶段:
pre-clean - 执行项目清理前所需要的工作。
clean - 清理上一次build项目生成的文件。
post-clean - 执行完成项目清理所需的工作.
default(默认)
validate - 验证项目是否正确且所有必要的信息都可用。
initialize - 初始化构建工作,如:设置参数,创建目录等。
generate-sources - 为包含在编译范围内的代码生成源代码.
process-sources - 处理源代码, 如过滤值.
generate-resources -
process-resources - 复制并处理资源文件,至目标目录,准备打包。
compile - 编译项目中的源代码.
process-classes - 为编译生成的文件做后期工作, 例如做Java类的字节码增强.
generate-test-sources - 为编译内容生成测试源代码.
process-test-sources - 处理测试源代码。
generate-test-resources -
process-test-resources - 复制并处理资源文件,至目标测试目录。
test-compile - 将需测试源代码编译到路径。一般来说,是编译/src/test/java目录下的java文件至目标输出的测试classpath目录中。
process-test-classes -
test - 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package -
package - 接受编译好的代码,打包成可发布的格式,如 JAR 。
pre-integration-test -
integration-test - 按需求将发布包部署到运行环境。
post-integration-test -
verify -
install -将包安装到本地仓库,给其他本地引用提供依赖。
deploy -完成集成和发布工作,将最终包复制到远程仓库以便分享给其他开发人员。
site(站点)
pre-site - 执行一些生成项目站点前的准备工作。
site - 生成项目站点的文档。
post-site - 执行需完成站点生成的工作,如站点部署的准备工作。
site-deploy - 向制定的web服务器部署站点生成文件。
三、Jenkins
1、Jenkins 安装(windows)
war包有两种安装方法
方法一
下载jenkins.war, 下载成功后,将war包文件放入对应的目录(如C:\\Users\\Jenkins\\),在命令行切换目录到Jenkins,然后执行java -jar jenkins.war
访问http://localhost:8080 , jenkins的主界面如下:
方法二
把Jenkins解压,把得到的war包直接扔到tomcat下,启动tomcat,Jenkins就安装完毕,访问http://localhost:8080
2、jenkins安装(linux)
操作系统:Centos 7.2
jenkins版本:2.33
gitlab版本:8.13.6
两台服务器:
192.168.100.10:jenkins Server
192.168.100.11 :gitlab Server
(1)jenkins是java编写的,所以需要先安装jdk,这里使用yum安装。
1
|
yum -y install java-1.8.0 java-devel-1.8.0 |
jenkins还需要从gitlab拉取代码,所以我们需要安装git命令行客户端
1
|
[root@node1 ~] # yum -y install git |
(2)安装jenkins
1
2
3
4
5
|
cd /etc/yum .repos.d/ wget http: //pkg .jenkins.io /redhat/jenkins .repo rpm -- import http: //pkg .jenkins.io /redhat/jenkins .io.key yum install -y jenkins systemctl start jenkins |
(4)选择安装的插件:只需要安装gitlab plugin,git plugin,还有ssh plugin插件即可,其他插件无须安装。
gitlab 和 git插件:我们的代码都放在gitlab上面,这两个插件用来做源码管理。
ssh插件:需要使用jenkins来执行shell命令。
(5)admin用户:按照提示填写即可
密码创建完成之后就可以登录jenkins了。
3、Jenkins操作
(1)关闭Jenkins
http://localhost:8080/exit
(2)重启Jenkies
http://localhost:8080/restart
(3)重新加载配置信息
http://localhost:8080/reload
(4)Jenkins时区设置为北京时间
打开 【系统管理】->【脚本命令行】运行下面的命令
System.setProperty(\'org.apache.commons.jelly.tags.fmt.timeZone\', \'Asia/Shanghai\')
4、插件安装
(1)如果在安装jenkins的时候没有安装相关插件,可以按照如下方式安装(已经安装,则不需要)
(2)如果有插件一直安装失败的情况,可以从jenkins官网下载插件,然后导入到jenkins。在jenkins插件管理->高级选择上传插件进行安装。
5、Jenkins密钥配置
(1)jenkins生成密钥对
登录到jenkins用户,生成密钥
1
2
3
4
|
[root@node1 ~] # su - jenkins bash -4.2$ ssh -keygen -t rsa bash -4.2$ cat . ssh /id_rsa .pub ssh -rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwIdUk3+V8aL2 /oMfvwCxp5AiyctL4bnYFnsKOcQz8w/MuAehy9/EEeT0HNQCSs0NQ3veFurWlKUB4tntNA7bMcZS/UWBSXh2uAJQCMcXbIWfdngaQwVVP +s5WvDbtL5Jk6mQch22aIIw4JaJh4L8dl1oyviwoBgOnscXVC /kDWgFM4BrHC4QNyzt6PdtuzX3RkMa4w7bqDvUWMqIyRBScW1fbfJeAwAK1tCQ7ZjfAoTcWpmoBlurH1P6SuWR3rYIPyhGDqjPQnlohqSX/vCrLWoHoYazETHfW2azzzBSGqMeCw3hlbSV/12kRQv0kGfnbhmnHZ1CBgX23N3ktqtzL jenkins@node1.fblinux.com |
把这个密钥添加到gitlab和jenkins服务器的root用户。因为jenkins执行部署操作,会出现很多权限问题,一个一个解决比较麻烦,所以直接让jenkins用户通过root方式执行部署操作。
1)添加公钥到gitlab服务器,用来clone代码
添加完成之后从gitlab服务器clone下自己的工程,会在.ssh/known_hosts添加gitlab服务器记录
1
|
- bash -4.2$ git clone git@192.168.100.11:root /jenkins_test .git |
2)添加公钥到jenkins服务器root用户,用来执行部署脚本
1
2
|
- bash -4.2$ ssh -copy- id -i . ssh /id_rsa .pub root@192.168.100.10 root@192.168.100.10\'s password: |
6、定时构建语法
* * * * * (五颗星,中间用空格隔开)
第一颗*表示分钟,取值0~59
第二颗*表示小时,取值0~23
第三颗*表示天,取值1~31
第四颗*表示第几月,取值1~12
第五颗*表示星期,取值0~7,其中0和7代表的都是周日
H表示随机,没有用到 H 随机的话,不要加括号
1.
H/30 * * * * 每30分钟构建一次:
2.
H H/2 * * * 每隔2个小时构建一次
H 4-19/3 * * * 凌晨点到下午7点,每隔3个小时构建一次
0 8 * * * 每天早上8点构建一次
H 8-18/3 * * * 每天早上8点到晚上6点每三小时检查一次
3.
* * 3-5 * * 每个月的3号,4号,5号 都会被构建,具体时间未知
20 16 15 * * 每个月的15号下午16点20分构建一次
4.
0 8,12,22 * * * 每天的8点,12点,22点,一天构建3次(多个时间点,中间用逗号隔开)
5.
每个月的1-7号一天构建一次
H/30 8-19/3 1-28 1-11 1-5 在1-11月中的1号-28号,每个工作日,早晨的8点到下午7点每隔3.5个小时会触发构建
三、jenkins操作
1、jenkins触发式构建
(1)准备一个测试脚本,开发如果提交了代码就执行这个测试脚本。
(2)创建一个触发构建的项目,选择自由软件风格即可
(3)源码管理选择git,然后只需要在repository url中输入git仓库地址即可。
(4)构建触发器:即gitlab有提交操作则自动部署,这里只需设置一个认证的token即可,
gitlab调用触发器,使用 JENKINS_URL/job/new_cms/build?token=TOKEN_NAME即可
在系统管理–>用户管理–>查看用户id和token,需要把用户id和API Token加入触发器中,做用户验证
根据触发器验证令牌和用户id+token会生成一个下面的url,只需要访问这个URL地址jenkins就会自动部署对应项目的代码。
1
|
http: //admin :984c9edf027e750f0587808fab0c3f9b@192.168.100.10:8080 /job/jenkins_trigger/build ?token=hehe |
在jenkins全局安全设置中取消勾选“防止跨站点请求伪造,不然jenkins会认为gitlab的请求不合法。
(5)构建,选择execute shell,执行部署脚本即可
(6)在gitlab中配置webhooks,配置URL,每次提交代码就访问这个url,执行构建
URL这里输入上面上面用户ID+API token+job token生成的URL地址即可。触发工作选择,push event,merge request event即可。
(7)添加完成测试:点击test模拟提交操作,看看是否会执行自动构建
Jenkins查看,可以看到构建也是成功的。
2、jenkins定时构建
定时构建一般用在安卓,ios打包,每天凌晨会拉取安卓,ios进行编译打包,并自动推送到共享。本示例演示定时执行一个命令
四、用户和权限
jenkins 配置用户角色权限需要安装插件 Role Strategy Plugin
1.安装 Role Strategy Plugin 插件,下载地址:https://updates.jenkins-ci.org/download/plugins/role-strategy/
打开jenkins 系统管理-->管理插件-->高级,点击上传,选择下载的插件安装
2、安装完后,重启jenkins,进入系统设管理-->Configure Global Security ,配置如下,保存
3.配置User/Group权限
打开 系统管理-->Manage and Assign Roles
3-1. 管理角色(Manage Roles)
选择该项可以创建全局角色、项目角色,并可以为角色分配权限
添加test组,并给Over all 的Read 权限、Job Build 权限、View的Read权限。
Project roles 配置Pattern,例如匹配以 auto开头的,需要写成 auto.*切记!配置完后保存
3-2.添加用户权限(Assign Role)
系统需要有用户(若没有可添加:系统管理 --> 用户管理 -->添加用户),然后:
4,创建 autotest 任务, 用户test(只有构建权限)用户登录进去,发现只能看到autotest任务,实现不同用户不同视图及不同权限
以上是关于Jenkins 使用学习笔记的主要内容,如果未能解决你的问题,请参考以下文章