安装Jenkins
访问Jenkins官网,按照其操作指引安装Jenkins。
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
然后安装jenkins.io.key
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
如果之前安装过Jenkins,则可以跳过此步,否则会报错,因为已经有了key
sudo yum upgrade
yum install jenkins
sudo systemctl daemon-reload安装完毕。
配置Jenkins
Jenkins默认配置:
- /usr/lib/jenkins/:jenkins安装目录,WAR包会放在这里。
- /etc/sysconfig/jenkins:jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置。
- /var/log/jenkins/jenkins.log:Jenkins日志文件。
- 默认的JENKINS_HOME: /var/lib/jenkins/:
- 默认端口号:8080
(1)修改默认端口号
编辑文件:vim /etc/sysconfig/jenkins
找到 JENKINS_PORT,修改默认(8080)的端口号,我这里改为8089 找到 JENKINS_USER,把启动用户从jenkins改为root,避免后面编写shell时各种权限问题。
(2)修改jdk配置
编辑文件:vim /etc/init.d/jenkins
找到 candidates 在第一行 加入 自己的jdk的java路径
注:linux查看jdk安装路径命令 —— which java
(3)修改防火墙配置:选一种方式执行
- 开启8088端口,然后重启防火墙: 开启8081端口:firewall-cmd –zone=public –add-port=8088/tcp –permanent 重启防火墙:firewall-cmd –reload
- 关闭防火墙:systemctl stop firewalld
Jenkins 常用命令:
启动:service jenkins start
重启:service jenkins restart
停止:service jenkins stop
在浏览器中打开http://ip:8088
解锁后,新增一个管理员用户username:jay。
如果Jenkins提示你处于离线状态,则需要在http://ip:8088/pluginManager/advanced 中将最后一行update site的Https协议改成http协议 即从updates.jenkins.io/update-cent… 改成updates.jenkins.io/update-cent…
连上远端插件服务器后,就可以开始安装所需插件了
如果改成http依然无法安装插件,可以先手工安装插件skip-certificate-check,再安装就不再检查certificate了。
新建测试Job,检查Jenkins的Job执行是否正常
新建一个Job
选择 freestyle project
上面创建完成后跳转进来后进行配置,选择丢弃旧的构建(下面保持天数一般在5~7天即可)
接着上面选择构建,然后选择Execute Shell 来执行shell命令
既然能执行shell命令,那么我们执行一个pwd,看下默认的工作目录在哪里
点击save
点击Build Now,开始执行脚本,在Build History的Console Output中看到执行结果
可以看到Job的默认执行目录是在$jenkins_home/workspace/job名称
GitLab+Jenkins实现自动更新代码
1、持续集成CI(continuous integration)
先在Jenkins中安装三个插件:
- Gitlab
- Gitlab Hook
- Build Authorization
在Gitlab中找到所要发布的project的Url地址如下:
在Jenkins中新建Item——Doorweb,将上面的Url地址填写进去
在构建面板中,选择execute shell,输入shell script
pwd
在Build Triggers页中,选择Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.1.105:8089/project/Doorweb ,在Secret token中生成token。
点击save
然后开始配置Gitlab页面。
在setting中选择web hook
将上面的Jenkins的project url和token填入。
点击save change,然后选择test-push events。
测试结果为
Hook executed successfully: HTTP 200
然后转到Jenkins,发现Jenkins已经通过web hook自动trigger,进行了自动构建。
此时在/var/lib/jenkins/workspace/Doorweb下有已经构建好的目录,下面是自动发布到服务器上。
2、持续发布CD(continuous deployment)
首先要构建SSH通道,以便能无需密码登录将文件能够scp到远程服务器上。
A为Jenkins用机; B为远程服务器,ip为192.168.1.110;
在A上运行命令:
- ssh-keygen -t rsa (连续三次回车,即在本地生成了私钥(id_rsa) 与公钥 (id_rsa.pub),不设置密码)
- ssh root@192.168.1.110 "mkdir .ssh" (需要输入远程服务器root密码)
- scp ~/.ssh/id_rsa.pub root@192.168.1.110:.ssh/id_rsa.pub (需要输入远程服务器root密码)
在B上的命令:
- touch /root/.ssh/authorized_keys (如果已经存在这个文件, 跳过这条)
- cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (将id_rsa.pub的内容追加到authorized_keys 中)
回到A机器: ssh root@192.168.60.110 (不需要密码, 登录成功)
然后在B上安装Ngnix,其中web目录为/opt/httpd/ccc(详细安装参考之前文章)
最后开始在Jenkins上,修改project的shell script为
CODE_DIR=/var/lib/jenkins/workspace/Doorweb
WEB_DIR=/opt/httpd/ccc
IP=XXX.XXX.XXX.XXX
TIME=`date +%F-%H-%M-%S`
#打包
cd $CODE_DIR && tar zcf /tmp/web-${TIME}.tar.gz ./*
#复制到远程服务器
scp /tmp/web-${TIME}.tar.gz $IP:$WEB_DIR
#在服务器上新建web-当前时间目录
ssh root@$IP "cd $WEB_DIR && mkdir web-$TIME"
#解压到该目录下,并删除压缩包
ssh root@$IP "cd $WEB_DIR && tar xf web-${TIME}.tar.gz -C web-$TIME && rm -rf web-${TIME}.tar.gz"
#重建html的快捷链接到该目录上,html链接就是ngnix指定的web目录。
ssh root@$IP "cd $WEB_DIR && rm -rf html && ln -s web-$TIME html"
配置全部完成,当修改IDEA中的代码,commit&push到gitlab后,即可自动发布到服务器B上,即时看到新版本效果。