搭建项目开发环境(七)—— 安装Jenkins及集成Gitlab

290 阅读2分钟

安装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

image.png

解锁后,新增一个管理员用户username:jay。

如果Jenkins提示你处于离线状态,则需要在http://ip:8088/pluginManager/advanced 中将最后一行update site的Https协议改成http协议 即从updates.jenkins.io/update-cent… 改成updates.jenkins.io/update-cent…

连上远端插件服务器后,就可以开始安装所需插件了

image.png

如果改成http依然无法安装插件,可以先手工安装插件skip-certificate-check,再安装就不再检查certificate了。

新建测试Job,检查Jenkins的Job执行是否正常

新建一个Job

image.png 选择 freestyle project

image.png

上面创建完成后跳转进来后进行配置,选择丢弃旧的构建(下面保持天数一般在5~7天即可)

image.png

接着上面选择构建,然后选择Execute Shell 来执行shell命令

image.png

既然能执行shell命令,那么我们执行一个pwd,看下默认的工作目录在哪里

image.png

点击save

image.png

点击Build Now,开始执行脚本,在Build History的Console Output中看到执行结果

image.png

可以看到Job的默认执行目录是在$jenkins_home/workspace/job名称

GitLab+Jenkins实现自动更新代码

image.png

1、持续集成CI(continuous integration)

image.png

先在Jenkins中安装三个插件:

  • Gitlab
  • Gitlab Hook
  • Build Authorization

在Gitlab中找到所要发布的project的Url地址如下:

image.png

在Jenkins中新建Item——Doorweb,将上面的Url地址填写进去

image.png

在构建面板中,选择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。

image.png

点击save

然后开始配置Gitlab页面。

在setting中选择web hook

image.png

将上面的Jenkins的project url和token填入。

image.png

点击save change,然后选择test-push events。

image.png

测试结果为

Hook executed successfully: HTTP 200

然后转到Jenkins,发现Jenkins已经通过web hook自动trigger,进行了自动构建。

image.png

此时在/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为

image.png

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上,即时看到新版本效果。