由于公司需要,这边记录一下自己在学习Jenkins的一些过程,以及遇到的一些坑。
安装
安装Jenkins
Jenkins的安装还是比较简单的,我用的是CentOs 6,安装步骤如下:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
yum install jenkins
参考网址:https://pkg.jenkins.io/redhat-stable/
安装JDK
安装完后不要着急启动,Jenkins需要JAVA环境,我这里用的是:jdk-8u161-linux-x64.tar.gz
tar -zxvf jdk-8u161-linux-x64.tar.gz
mv /upload/jdk1.8.0_161/ /usr/local/java/jdk1.8/
解压完成后添加一下环境变量vi /etc/profile
,在文件的最前面添加:
export JAVA_HOME=/usr/local/java/jdk1.8
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
然后刷新一下文件,让修改生效source /etc/profile
,检查一下:
[root@localhost upload]# java -version
java version "1.8.0_161"
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
修改Jenkins启动文件
JAVA环境安装好了,但这里Jenkins还是启动不了的,这也是一个坑,尝试启动:
[root@localhost upload]# service jenkins start
Starting Jenkins bash: /usr/bin/java: No such file or directory
[FAILED]
根据提示,知道jenkins没有找到java这个文件,我们需要帮他找,修改jenkins的启动文件vi /etc/init.d/jenkins
,里面有这么一段代码:
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
"
加上我们刚刚安装JDK的位置/usr/local/java/jdk1.8/bin/java
,注意这里需要的事java这个可执行文件的路径,修改后是这样:
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/bin/java
/usr/local/java/jdk1.8/bin/java
"
再次重启,成功了,我们可以查看启动日志tail -f /var/log/jenkins/jenkins.log
。
日志中会打印出第一次解锁Jenkins的密码
或者在这里查看cat /var/lib/jenkins/secrets/initialAdminPassword
开放端口
如果防火墙是永久关闭的,跳过这一步。
Jenkins默认用8080端口启动,可以在vi /etc/sysconfig/jenkins
里面搜索JENKINS_PORT="8080"
看到,然后在vi /etc/sysconfig/iptables
里面添加一行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
保存退出后,重启iptables:service iptables restart
初始化Jenkins
访问Jenkins服务器的8080端口,需要填写前面提到的解锁密码,然后安装推荐的插件,等待安装完成。
推荐插件安装完成后,需要增加一个账户,根据需要自己填写。
下一步的实例配置用默认的即可。
全部配置完成后,进入Jenkins主界面。
搭建Git + Maven + SSH Server 的CI(持续集成)环境
Jenkins相关插件安装
安装推荐插件后,Git Plugins
已经有了,还需要安装Maven Integration
和Publish Over SSH
,我们通过 系统管理 -> 插件管理 -> 可选插件,搜索前面提到的俩个插件,全部勾选后点击直接安装,等待安装完成后重启Jenkins:service jenkins restart
。
Maven 安装
下载maven:http://maven.apache.org/download.cgi ,我这里用的是当前的最新版apache-maven-3.6.0-bin.tar.gz
上传到Jenkins服务器上,解压:tar -zxvf apache-maven-3.6.0-bin.tar.gz
解压后移动到:mv apache-maven-3.6.0 /usr/local/maven
增加环境变量vi /etc/profile
:
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
刷新配置文件后测试是否成功:
[root@localhost maven]# source /etc/profile
[root@localhost maven]# mvn -version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T11:41:47-07:00)
Maven home: /usr/local/maven
Java version: 1.8.0_161, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-754.2.1.el6.x86_64", arch: "amd64", family: "unix"
Maven安装结束
Git 安装
直接使用:yum -y install git
,等待安装完成即可。
测试是否安装成功:
[root@localhost maven]# git --version
git version 1.7.1
Jenkins全局工具配置
系统管理 -> 全局工具配置 ,对JDK、git、Maven做相关配置:
保存即可。
目标服务器免密配置
Jenkins有时需要对其他服务器发送文件或者是命令,这时就需要免密配置了。
由于Jenkins是使用jenkins用户执行操作的,所以我们先切换到jenkins用户:su jenkins
默认情况下可能是切换不了的,我们需要修改vi /etc/passwd
,找到jenkins相关的那条:
jenkins:x:496:493:Jenkins Automation Server:/var/lib/jenkins:/bin/false
修改为:
jenkins:x:496:493:Jenkins Automation Server:/var/lib/jenkins:/bin/bash
修改后再次执行:su jenkins
,成功切换至jenkins用户。
生成密钥:ssh-keygen -t rsa
,全部回车通过,使用默认值。
成功后会在 /var/lib/jenkins/.ssh/ 目录下生成一对公私钥文件,查看公钥:cat /var/lib/jenkins/.ssh/id_rsa.pub
,复制公钥的内容,在目标服务器的/root/.ssh
目录下会有一个authorized_keys
文件,没有就自己创建,然后将公钥的内容复制到文件中。
设置authorized_keys权限
$ chmod 600 authorized_keys
设置.ssh目录权限
$ chmod 700 -R .ssh
设置权限后重启一下sshd服务service sshd restart
重启成功后来到Jenkins服务器测试一下:ssh root@目标服务器IP
,如果无需输入密码则配置成功。
增加SSH Server
系统管理 -> 系统配置 -> Publish over SSH
我们在Path to key 这一栏填上Jenkins服务器的私钥位置/var/lib/jenkins/.ssh/id_rsa
,其他的配置像这样:
Remote Directory:是Jenkins链接目标服务器后的工作目录
创建项目
经过以上的准备,我们终于可以创建项目了,点击主界面下的新建任务,输入任务名称,选择Maven项目。
源码
进入项目的详细配置页面,首先设置项目源码的位置:
这里我使用的是码云,如果我们没有把Jenkins的公钥放在码云上,是不能连接到这个仓库的,就像图中一样,设置好公钥就不会有图上的提示了,这里注意一点,第一次设置完公钥需手动连接一次git仓库,比如手动git clone一次项目,因为在第一次连接会有一个连接提示,可能会导致Jenkins连接失败。
编译
Root POM:这里天pom.xml的位置,从项目的根路径开始。
Goals and options:这里填mvn后跟的命令及参数,这里是对我们的项目打了包。
部署
这是编译后的操作,首选我们选择:
也就是说在编译成功后才会执行下面的操作。
编译成功后我们只需将其复制到目标服务器并运行即可。
添加一个:
Name:这里选择的就是我们刚刚配置的SSH Server
Source files:要传输的文件在哪,相对于项目根路径
Remove prefix:忽略的前缀,作用是在传输过后不携带前缀的目录
Remote directory:传输的文件存放在那个目录下,这里是相对于SSH Server中配置的Remote directory目录的
Exec command:传输完成后执行的命令
到这里,一个简单的Maven + Git + SSH Server的CI环境就搭好了。
构建项目
进入项目详情,点击立即构建。
构建过程中可以进入控制台查看日志。
等待其构建完成即可。