CentOS 7.4 安装 Jenkins 并自动化构建部署
环境要求
安装 Jenkins
需要有 java
环境,请先安装并配置好 jdk
安装流程
-
下载依赖
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
-
导入密钥
rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
-
通过
yum
安装yum install jenkins
-
查看安装目录相关信息
rpm -ql jenkins
如下图所示
-
jenkins
相关目录含义/usr/lib/jenkins/:jenkins 安装目录 /etc/sysconfig/jenkins:jenkins 配置文件 /var/lib/jenkins/:默认的 JENKINS_HOME /var/log/jenkins/jenkins.log:jenkins 日志文件
-
修改
jenkins
端口号和用户jenkins
默认端口号为8080
,为了防止端口冲突,修改端口号为8888
,用户默认为jenkins
,直接修改为root
vim /etc/sysconfig/jenkins
JENKINS_USER="root" JENKINS_PORT="8888"
-
启动
service jenkins start
查看启动状态
service jenkins status
关闭
service jenkins stop
设置开机自启动
chkconfig jenkins on
-
如果启动报错,查看错误日志
journalctl -xe
发现
jdk
路径报错
修改
Jenkins
启动配置文件,指定java
安装路径vim /etc/init.d/jenkins
在下图所示最后一行添加自己的
java
安装路径保存退出后
systemctl daemon-reload
-
启动成功后,访问
http://ip:8888
即可进行初始化配置,初始密码在/var/lib/jenkins/secrets/initialAdminPassword
中cat /var/lib/jenkins/secrets/initialAdminPassword
-
登陆后,选择安装默认配置插件,等待安装完成,然后创建账户(默认第一个账户为管理员),一路点确定,即可进入
jenkins
首页 -
进入系统管理,点击全局工具配置,配置
Maven
、JDK
、Git
、NodeJS
等所需环境的名字和路径;然后点击插件管理,安装所需的插件,下面是几个我所需要的插件Deploy to container Plugin
Config File Provider Plugin
Generic Webhook Trigger Plugin
Publish Over SSH
NodeJS Plugin
构建部署
-
我们以后端 maven 项目为例,在DashBord下,点击新建任务,创建一个任务,输入任务名称,选择创建一个自由风格的软件项目
-
点击确定后,开始进行任务配置,在
General
添加任务描述,配置构建策略相关信息 -
在源码管理中选择
Git
,配置Git
仓库地址Repository URL
,添加身份认证信息Credentials
,指定代码分支 -
构建环境中勾选控制台输出时间戳信息
-
在构建中点击增加构建步骤,选择
调用顶层maven目标
,选择你的 maven 版本,输入目标clean install package -Dmaven.test.skip=true -Pdev
再点击增加构建步骤,选择
执行Shell
,构建完成后会自动运行Shell
脚本参考的
Shell
脚本如下# 时间防重 DATE=$(date +%Y%m%d%H%M%S) # 工作区路径 WORKSPACE=/var/lib/jenkins/workspace/demo # 备份区路径 DIR=/app/demo # maven项目生成的jar包 JARFILE=$WORKSPACE/target/demo.jar # 每次构建完成的备份文件 BACKFILE=$DIR/backup/demo-$DATE.jar # 创建备份区 if [ ! -d $DIR/backup ]; then mkdir -p $DIR/backup echo "创建backup" fi # 关掉上次启动的项目 PID=`ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}'` if [ -n "$PID" ]; then kill -9 $PID echo "关闭旧服务" fi # 备份jar包 cp -u $JARFILE $BACKFILE # 只保留5个备份文件 cd $DIR/backup/ ls -lt | grep -v total | awk 'NR>5{print $NF}' | xargs rm -f # 启动 cd $WORKSPACE if [ ! -d $WORKSPACE/logs ]; then mkdir -p $WORKSPACE/logs echo "创建logs" fi # 让jenkins的jar进程不被杀死 BUILD_ID=dontKilMe nohup java -jar $JARFILE > $WORKSPACE/logs/demo.log 2>&1 &
构建部署到远程服务器
-
制作
SSH
私钥,机器间做免密登录配置机器
A
:192.168.AA.AAA
机器
B
:192.168.BB.BBB
机器
A
能够免密登录机器B
进入
A
机器,执行cd ~ ssh-keygen -t rsa
通过下面的命令,表示可以通过机器
192.168.AA.AAA
免密登录到机器192.168.BB.BBB
ssh-copy-id 192.168.BB.BBB
测试是否登录 B 机器
ssh 192.168.BB.BBB
退出登录
logout
-
SSH
登录遇到Permission denied
原因是
ssh
对目录的权限有要求,需要将.ssh/authorized_keys
的权限修改成600
,执行cd .ssh chmod 600 authorized_keys
发现文件被锁定,无法修改
使用
lsattr
查看加锁情况lsattr authorized_keys
发现有
i
属性使用
chattr
解锁,发现没有该命令(可能系统被动过,被删掉了)chattr -i authorized_keys
如图
重新安装
e2fsprogs
yum -y remove e2fsprogs yum -y install e2fsprogs
安装成功后再改变权限
chattr -i authorized_keys chmod 600 authorized_keys
-
配置
Publish Over SSH
进入
Jenkins
—> 系统管理 —> 系统配置,配置Publish over SSH
-
构建执行
Shell
合适位置添加scp -r $FILE user@ip:$DIR/ export BUILD_ID=DONTKILLME
通过
ssh
将文件推送到远程服务器 -
构建后操作
执行脚本修改权限为 755
chmod 755 demo.sh
-
通过
shell
脚本运行jar
包,报错nohup: failed to run command ‘java’: No such file or directory
服务器上安装了
java
,环境变量也配置成功了的。在命令行输入java -version
也能查到版本号。但是通过脚本执行java
命令时确报错找不到java
。这是由于脚本执行命令的时候会默认区/usr/bin
里面去找java
,结果就找不到。我们只需要将java
的bin
配置软链接映射到/usr/bin
目录下即可echo $JAVA_HOME cd /usr/bin ln -s -f $JAVA_HOME/bin/java