使用 Jenkins 自动构建项目

本文最后更新于:2018年11月20日 晚上

前言

公司项目开发到后期需要放到服务器上面去运行测试,但是不想每次都在本地编译成 jar 之后传到服务器再运行,于是使用 Jenkins 来完成这些步骤

安装 jenkins

# 需要先安装 java
apt install software-properties-common
add-apt-repository ppa:webupd8team/java
apt-get update
apt-get install oracle-java8-installer

# 安装 jenkins
wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

配置 jenkins

vim /etc/default/jenkins 

修改里面的 http 端口

caddy 反向代理

jenkins.domain.com {
        proxy / localhost:8080 {
                transparent
        }
}

启动

/etc/init.d/jenkins start
# 或者 service jenkins start

配置

访问 jenkins.domain.com 完成配置,
一般直接选择默认配置就好了
一开始需要获取默认密码,使用

cat /var/lib/jenkins/secrets/initialAdminPassword

可以获取

获取 API TOKEN

  • 面板右边的系统管理

  • 管理用户

  • 用户列表右边的图标

  • 拿到用户的 USER ID 和 API TOKEN

    User ID : root
    API TOKEN : 7d77089fq8f86906px5b5d707d13d
    

安装Hudson Post build task 插件

因为我们要让项目在构建成功之后自动运行,所以要手动增加一个插件 Hudson Post build task

1 进入插件管理中心

搜索到 Hudson Post build task 插件之后安装就好了

新建项目

1 新建

一般选择第一个

2 配置 git 地址


填入 git 地址,如果有用户名和密码的话也要设置好

3 设置构建触发


这里要配置一个 TOKEN,后面要用到

4 配置构建脚本

我的项目是 Spring Boot ,使用 mvn 命令就可以构建了,所以脚本内容如下

echo $WORKSPACE
echo $pwd
mvn install -Dmaven.clean.failOnError=false -Djar.forceCreation -Dmaven.test.skip=true

5 设置构建好之后的运行脚本

由于我们已经安装了 Hudson Post build task,所以能够选择构建之后运行特定的 Shell 脚本

脚本内容如下

#!/bin/bash 
echo "停止之前运行的 jar"
pid=`ps -ef | grep test-DEBUG-SNAPSHOT-exec | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
echo "kill -9 的pid:" $pid
kill -9 $pid
fi
# 保持脚本运行
BUILD_ID=dontKillMe

# 将 jar 复制到运行文件夹
cp /var/lib/jenkins/workspace/test/target/test-DEBUG-SNAPSHOT* /home/sboot/
# 启动 jar
java -jar /home/sboot/test-DEBUG-SNAPSHOT-exec.jar &

6 设置权限

起初我无法在构建之后运行脚本,一直提示权限不足,后面将 jenkins 设置为 ROOT 权限运行之后,就可以解决了,虽然会有不安全的因素

设置步骤如下

vim /etc/default/jenkins
# 修改或者增加 JENKINS_USER="root"

# 然后修改Jenkins home,webroot和日志的所有权
chown -R root:root /var/lib/jenins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins

# 重启 jenkins
service restart jenkins

设置 webhook

新建完项目之后我们就可以设置 WebHook 使得我们 push 了之后项目 jenkins 能够知道并有所动作

因为项目是放在 Gitee 上面的,所以这里就以 Gitee 作为示范

地址的格式是

https://{你的User ID}:{你的API TOKEN}@{你的服务器域名}/job/{jenkins上面的项目名称}/build?token={远程构建的触发认证TOKEN}

例如

https://admin:7d77089fq8f86906px5b5d707d13d@jenkins.domains.com/job/Test/build?token=Build-TOKEN

填进去之后就可以测试了,如果 Webhook 无法生效的话,可能是 jenkins 设置了跨域访问限制,可以在

系统管理 -> 全局安全配置 -> CSRF Protection

设置,取消跨域访问限制

后面的就是测试构建能够成功,以及根据输出来修改构建脚本或者运行脚本吧