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,直接修改为rootvim /etc/sysconfig/jenkinsJENKINS_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.BBBssh-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如图
重新安装
e2fsprogsyum -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