手工打包上传,解压启动的过程速度慢,过于繁琐,借助于Jenkins,可以实现自动编译打包部署。
安装Jenkins
直接从官网https://jenkins.io/zh/download/下载最新的war包,然后解压到某个固定目录,使用java -jar jenkins.war
启动即可,默认它会将war包解压到~/.jenkins目录下,并生成一些目录及配置文件。或:
- 后台启动
nohup java -jar jenkins.war &
- 更多参数
/opt/jdk1.8.0_181/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8082 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
上面笔者的实例设置了jenkins_home,日志位置,后台运行,以及端口。
更多安装请参考自动部署Jenkins使用教程
新建项目
点击新建任务 --> 输入任务名称 --> 构建一个自由风格的软件项目
下面我会介绍必不可少的配置项:
源码管理
第一步告诉jenkins源码位置,便于jenkins拉取代码,进行编译打包
如果我们代码托管在gitlab或github,选择git:
Repository URL: 项目git地址
Credentials: 登录gitlab或github的账户,首次设置点击添加,输入用户名密码后刷新页面(刷新之前需要保存当前配置,避免丢失)
Branches tp build: 代码分支
源码库浏览器: 如果设置则可以在jenkins中查看代码修改详细信息,笔者源码托管在gitlab上,所以选择gitlab,然后下面URL和Version分别是gitlab的地址和版本
触发器
告诉jenkins何时进行代码拉取、编译打包?可以选择定时,或者轮训SCM,当有commit时,自动触发,笔者这里选择就是轮训SCM
构建
告诉jenkins如何编译、打包源码?笔者选择使用maven进行编译,打包使用assembly插件,具体配置在maven的pom.xml。
如上图,笔者配置了两个不同的构建步骤:
-
调用顶层Maven目标
首先使用maven进行编译、打包,这里不用mvn命令,只输入clean package -
执行shell
然后使用scp命令将打包好的tar.gz压缩包上传到目标机器,然后解压,启动等。
需要在目标机器执行命令,则可以在上面命令窗口编辑,比如ssh到远程机器,然后执行若干命令:扫描二维码关注公众号,回复: 9639713 查看本文章ssh test@ip << remote_ # 省略 exit; remote_
这里会涉及免密登录目标机器的配置,有两种方案:
- 用启动jenkins的那个用户,使用
ssh-keygen -t rsa
命令生成秘钥对,然后手工将jenkins机器的公钥id_rsa.pub内容拷贝到目标机器的对应用户authorized_keys文件中。具体原理可参考: - 借助jenkins的插件publish-over-ssh进行免密登录远程主机,并传送文件,该插件的配置可以参考:
构建后
一切完成之后,需要清理编译打包生成的临时文件
OK,一个基本的CICD配置完成,笔者实践时也是走了一些弯路,希望对大家有用。 - 用启动jenkins的那个用户,使用