使用Jenkins完成持续集成

安装Jenkins

首先,从Jenkins官方网站https://jenkins.io/下载最新的war包。虽然Jenkins提供了Windows、Linux、OS X等各种安装程序,但是,这些安装程序都没有war包好使。只需要运行命令:

nohup java -jar jenkins.war --httpPort=8081 & 

Jenkins就启动成功了!它的war包自带Jetty服务器,剩下的工作我们全部在浏览器中进行。

第一次启动Jenkins时,出于安全考虑,Jenkins会自动生成一个随机的按照口令。注意控制台输出的口令,复制下来,然后在浏览器输入:

http://localhost:8080/

粘贴口令,进入安装界面,如果执行默认的安装,Jenkins就自动配置好了Maven、git等常用插件。最后,创建一个admin用户,完成安装。
这里写图片描述

这里写图片描述

用管理员账号登录Jenkins后,第一次使用前,需要在“系统管理”->“Global Tool Configuration”->“Maven”中新增一个Maven,直接输入一个名字,选中“自动安装”,Jenkins会自动下载并安装Maven:
这里写图片描述

然后,在Jenkins首页选择“新建”,输入名字,选择“构建一个maven项目”,如果在创建项目时候,没有“创建一个Maven 项目”的选项:

这里写图片描述

你需要安装Maven项目插件:Maven Integration plugin 。

这里写图片描述

点击“可选插件” 然后在右边的过滤输入框中输入搜索关键字: Maven Integration Plugin 或者 Pipeline Maven Integration Plugin ,搜索到了以后,点击直接安装,安装完成后重启就好了。

Jenkins集成SVN项目

首先创建一个Maven项目。

这里写图片描述

在“General”中输入项目基本信息。

这里写图片描述

在“源码管理”选项中选择Subversion,将SVN服务代码目录填入Repository URL。

如果出现“unable to access the repository”,代表Jenkins没有要访问代码的权限,需要配置能获取代码的用户名和密码。

解决办法:点击报错信息中的enter credential链接进入证书配置界面,输入有svn代码权限的账号密码。

这里写图片描述

在“Build”中输入执行脚本:(截图中命令不需要mvn)。高级里面还可以配置workspace,不配默认在jenkins安装目录中

这里写图片描述

在“Post Steps”自动构建步骤配置中输入Build后需要部署执行的代码:记得命令行必须取得Linux的操作权限。
这里写图片描述

点击保存即可开始使用自动构建SVN项目。

如果构建失败,出现“No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?”,就需要去配置JDK环境:

这里写图片描述

Jenkins构建实现文件上传到远程服务器

Publish Over SSH插件的系统配置

安装步骤:
系统管理→管理插件→可选插件→Artifact Uploaders→Publish Over SSH

然后在系统管理→系统设置配置:

公共配置:
Passphrase:密码(key的密码,如果你设置了)
Path to key:key文件(私钥)的路径
Key:将私钥复制到这个框中
Disable exec:禁止运行命令

私有配置
SSH Server Name:标识的名字(随便你取什么)
Hostname:需要连接ssh的主机名或ip地址(建议ip)
Username:用户名
Remote Directory:远程目录
Use password authentication, or use a different key:可以替换公共配置(选中展开的就是公共配置的东西,这样做扩展性很好)
注意:这里选中后会有一些选项出现,若不想用key的方式,可以用账号+密码的方式登录服务器

私有配置的高级选项
Port:端口(默认22)
Timeout (ms):超时时间(毫秒)默认即可
Disable exec:禁止运行命令
Test Configuration:测试连接

这里写图片描述

这里写图片描述

工程配置

完成系统配置后,还需要在工程中完成配置。

启用步骤:构建后操作→Add post-build action→Send build artifacts over SSH

SSH Server Name:选个一个你在系统设置里配置的配置的名字
Transfer Set Source files:需要上传的文件(相对于工作区的路径。看后面的配置可以填写多个,默认用,分隔)
注意:这里用的是相对工作区的路径,比如你这个jenkins的工作目录为../Jenkins/workspace/TEST,那这的目录只能是相对于这个目录下的
Remove prefix:移除目录(只能指定Transfer Set Source files中的目录,比如我的Transfer Set
Source files为APP_BUILD/XXX.apk,那这里Remove
prefix则填APP_BUILD/,不然的话远程服务器上会新建APP_BUILD/目录)
Remote directory:远程目录(根据你的需求填写吧,因为我这儿是测试,所以偷懒没有填写。默认会继承系统配置)
Exec command:把你要执行的命令写在里面

这里写图片描述

当执行构建的时候编译后的程序会上传到远程服务器的制定目录。

Jenkins执行远程Linux系统的shell命令

当实现远程上传完文件后,可能还需要执行远程服务器的脚本(比方说重启程序)。

配置SSH remote hosts

首先,需要在系统管理→系统设置里面配置SSH remote hosts:

这里写图片描述

工程配置

勾选Execute shell script on remote host using ssh。

这里写图片描述

之后构建工程的时候就会实现同时远程上传和远程执行脚本的功能。

jenkins中通过execute shell启动的进程会被杀死的问题

在jenkins中配置自动更新部署项目时,如果采取用execute shell启动/关闭tomcat,会发现可以进行关闭tomcat,但是无法启动tomcat,虽然构建会显示执行成功,但是查看进程,tomcat是没有启动的。这是因为Jenkins默认会在Build结束后Kill掉所有的衍生进程。需要进行以下配置,才能避免此类情况发生:

在execute shell输入框中加入BUILD_ID=DONTKILLME,即可防止jenkins杀死启动的tomcat进程.

jenkins使用nohup无法启动程序或无法输出nohup.out文件

使用setsid替换nohup命令。

原始命令:

nohup java -jar app.jar &

解决方法:

(方法1) 使用setsid命令
source /etc/profile
setsid java -jar app.jar >> out.log 2>&1 &

猜你喜欢

转载自blog.csdn.net/sinat_37138973/article/details/79911554
今日推荐