承接上文
上文讲到,jenkins 如何跟 gitlab 协同合作,实现从 gitlab 拉取代码构建,本文将会讲到,利用 gitlab 钩子实现自动化的构建发布
请把本文结合前文看,要不然你看不懂~
gitlab 钩子与 jenkins
首先配置 jenkins 项目,承接上文,还是 website 项目,跟着下面的图片操作即可,最后记得点保存呀
配置 gitlab 钩子
测试是否生效
jenkins 构建完成直接发布到 web 服务器
首先在 web 服务器部署 nginx 和建立用来存放前端项目的目录
还有我的项目依赖于 nodejs,所以我这里还安装了 nodejs 相关的东西
具体需求具体分析,这里仅做参考
[root@dev-of-runfa-27 ~]# yum -y install nginx
[root@dev-of-runfa-27 ~]# mkdir -p /data/website
[root@dev-of-runfa-27 ~]# echo '' > /etc/nginx/nginx.conf
[root@dev-of-runfa-27 ~]# vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
gzip on;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
}
[root@dev-of-runfa-27 ~]# vim /etc/nginx/conf.d/www.conf
server {
listen 80;
server_name 10.18.193.27;
location /favicon.ico {
root /data/website;
}
location / {
proxy_pass http://127.0.0.1:9090;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
[root@dev-of-runfa-27 ~]# systemctl start nginx.service
[root@dev-of-runfa-27 ~]# systemctl status nginx.service
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since 二 2019-06-25 17:37:19 CST; 3s ago
Process: 26196 ExecStart=/usr/sbin/nginx (code=exited, status=0/SUCCESS)
Process: 26193 ExecStartPre=/usr/sbin/nginx -t (code=exited, status=0/SUCCESS)
Process: 26191 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (code=exited, status=0/SUCCESS)
Main PID: 26199 (nginx)
Tasks: 3
Memory: 5.5M
CGroup: /system.slice/nginx.service
├─26199 nginx: master process /usr/sbin/nginx
├─26200 nginx: worker process
└─26201 nginx: worker process
6月 25 17:37:18 dev-of-runfa-27 systemd[1]: Starting The nginx HTTP and reverse proxy server...
6月 25 17:37:19 dev-of-runfa-27 nginx[26193]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
6月 25 17:37:19 dev-of-runfa-27 nginx[26193]: nginx: configuration file /etc/nginx/nginx.conf test is successful
6月 25 17:37:19 dev-of-runfa-27 systemd[1]: Started The nginx HTTP and reverse proxy server.
[root@dev-of-runfa-27 ~]# wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x64.tar.xz
[root@dev-of-runfa-27 ~]# tar xvf node-v8.10.0-linux-x64.tar.xz
[root@dev-of-runfa-27 ~]# mv node-v8.10.0-linux-x64 /usr/local/node-v8.10.0
[root@dev-of-runfa-27 ~]# ln -sf /usr/local/node-v8.10.0/bin/node /usr/local/bin/
[root@dev-of-runfa-27 ~]# ln -sf /usr/local/node-v8.10.0/bin/npm /usr/local/bin/
[root@dev-of-runfa-27 ~]# node -v
v8.10.0
[root@dev-of-runfa-27 ~]# npm -v
5.6.0
[root@dev-of-runfa-27 ~]# npm install -g pm2
[root@dev-of-runfa-27 ~]# ln -sf /usr/local/node-v8.10.0/bin/pm2 /usr/local/bin/
[root@dev-of-runfa-27 ~]# pm2 -v
3.5.1
配置 jenkins 和 web 服务器之间的 ssh 加密,此处还是使用之前生成的私钥和公钥
私钥放 jenkins,公钥放 web 服务器的 authorized_keys 文件
先看放 jenkins
然后把公钥放到 web 服务器上
[root@dev-of-runfa-27 ~]# mkdir .ssh
[root@dev-of-runfa-27 ~]# vim .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCbSX9TOg4aWkgrVzPz48oQkYguZXkUlYtjAf8pt7tzkYZLR2VctwCXtOeCNX1Q1KQINeHv3ZOEKvmExnIvlgAPR0nx9EtaZbDI7yd51r0j5ed1BiS2Bb1MI+2uOq6G0UxsvqDC8C5rqPOaTbBDM01Qd+RAj54CT QV7VdgotDVn8KGTpmiR/C5nvrbPGmbJPIwkEM2JsQwGjs9yot8S7DfuFMSRIIYNWLTUibhv2cKXdMrplEiq+JBrGs4jKs6VCqFAJIFu0/xPs7VmZYDWwx3B6HFRDKP34n/HqESt/wM5KZqYzZ/gQrEDRLJ9xuX87PUSDV7Fy3GZmsj2rwIS19x root@dev-of-runfa-25
[root@dev-of-runfa-27 ~]# chmod 700 .ssh
[root@dev-of-runfa-27 ~]# chmod 600 .ssh/authorized_keys
返回 jenkins 上,测试一下是否正常
配置 jenkins 上的项目,使构建完成直接发布
返回 gitlab 的钩子配置页面,模拟 push 操作
使用浏览器测试项目是否发布成功
这篇文章结束了
到这里,已经把 jenkins 和 gitlab 串联起来并做了自动化的构建发布 因为篇幅所限,下一篇文章将介绍如何把 ansible 引入到 jenkins 中做发布,同时也会讲到如何实现利用 jenkins 的 ${BUILD_NUMBER} 变量来实现回滚