Jenkins 部署与使用
Jenkins 介绍
Jenkins是一款开源的自动化服务,多插件,可用于自动执行与构建,测试和交付或部署软件有关的各种任务。
常见代码部署方式
#蓝绿部署:
蓝绿部署指的是不停老版本代码(不影响上一个版本访问),而是在另外一套环境部署新版本然后进行测试,测试通过后将用户流量切到新版本,其特点为业务无中断,升级风险相对较小
#金丝雀发布:
金丝雀发布也叫灰度发布,是指在黑与白之间,能够平滑过渡的一种发布方式,灰度发布是在原有版本可用的情况下,同时部署一个新版本应用作为“金丝雀”(小白鼠),测试新版本的性能和表现,以保障整体系统稳定的情况下,尽早发现、调整问题。
#滚动发布:
滚动发布,一般是取出一个或者多个服务器停止服务,执行更新,并重新将其投入使用。周而复始,直到集群中所有的实例都更新成新版本。
#A/B 测试:
A/B 测试也是同时运行两个APP环境,但是蓝绿部署完全是两码事,A/B 测试是用来测试应用功能表现的方法,蓝绿部署的目的是安全稳定地发布新版本应用,并在必要时回滚,即蓝绿部署是一套正式环境环境在线,而A/B测试是两套正式环境在线
部署web架构
#规划:
10.0.0.3 gitlab服务器
10.0.0.13 jenkins服务器
10.0.0.7 haproxy服务器
10.0.0.8 10.0.0.18 10.0.0.28 tomcat服务器
#tomcat服务器部署
useradd www -u 2020
yum install java-1.8.0-openjdk -y
tar xvf apache-tomcat-8.5.53.tar.gz -C /opt/
ln -s /opt/apache-tomcat-8.5.53/ /opt/tomcat
echo PATH='/opt/tomcat/bin/:$PATH' > /etc/profile.d/tomcat.sh
. /etc/profile.d/tomcat.sh
mkdir /data/tomcat/webapps -pv
vim /opt/tomcat/conf/server.xml
<Host name="localhost" appBase="/data/tomcat/webapps" unpackWARs="true" autoDeploy="true">
mkdir /data/tomcat/webapps/myapp
echo IP地址 > /data/tomcat/webapps/myapp/index.html
chown -R www.www /data/tomcat/ /opt/tomcat/
su - www -c "catalina.sh start"
curl 10.0.0.8:8080/myapp/index.html
#haproxy部署
yum install readline-devel gcc openssl-devel pcre-devel systemd-devel -y
tar xvf lua-5.3.5.tar.gz -C /opt/
cd /opt/lua-5.3.5/
make linux test
src/lua -v
tar xvf haproxy-2.1.4.tar.gz -C /opt/
cd /opt/haproxy-2.1.4/
make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/opt/lua-5.3.5/src/ LUA_LIB=/opt/lua-5.3.5/src/
make install PREFIX=/opt/haproxy
ln -s /opt/haproxy/sbin/haproxy /usr/sbin/
haproxy -v
useradd -r -s /sbin/nologin haproxy -d /var/lib/haproxy
mkdir /etc/haproxy /var/lib/haproxy
chown -R haproxy.haproxy /var/lib/haproxy/
vim /etc/haproxy/haproxy.cfg
listen stats
bind 0.0.0.0:9999
stats enable
log global
stats uri /status
stats auth admin:123456
listen web_8080
bind 10.0.0.7:8080
log global
server 10.0.0.8 10.0.0.8:8080 check inter 3s fall 2 rise 3
server 10.0.0.18 10.0.0.18:8080 check inter 3s fall 2 rise 3
server 10.0.0.28 10.0.0.28:8080 check inter 3s fall 2 rise 3
vim /lib/systemd/system/haproxy.service
...
vim /etc/sysctl.conf
sysctl -p
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
systemctl daemon-reload
systemctl start haproxy
#浏览器访问http://10.0.0.7:9999/status
#浏览器访问http://10.0.0.7:8080/myapp/
Jenkins 概念
Jenkins是一款开源 CI&CD 软件,基于Java开发的一种持续集成工具,用于自动化各种任务,包括构建、测试和部署软件
Jenkins 服务器部署
https://mirrors.tuna.tsinghua.edu.cn/jenkins/ #下载地址
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/debian/jenkins_2.222_all.deb
apt install -y daemon openjdk-8-jdk
dpkg -i jenkins_2.222_all.deb
dpkg -L jenkins
vim /etc/default/jenkins
JENKINS_USER=root
JENKINS_GROUP=root
systemctl restart jenkins
#浏览器访问http://10.0.0.13:8080/
vim /var/lib/jenkins/hudson.model.UpdateCenter.xml #可改为国内地址
Jenkins 插件管理
手动安装插件Role-based
1,去清华大学下载需要的插件role-strategy.hpi
2,插件管理,上传下载的插件
自动安装插件
1,插件管理
2,搜索插件,安装插件
Jenkins 邮箱配置
1,生成 QQ 邮箱登录授权码 qxstmklncdicdagh
2,配置jenkins管理员邮箱,系统配置,邮件通知
系统管理员邮件地址: 18559002373@163.com
SMTP server:smtp.qq.com
用户: 3483663354@qq.com
密码: qxstmklncdicdagh
SMTP端口: 465
Reply-To Address: 3483663354@qq.com
3,测试发送
Jenkins 任务管理
1,新建任务
2,丢弃旧的构建,保留30天,保留10个
3,源码管理
4,构建: 执行shell命令
5,构建后操作: mail等
6,立即构建测试
创建基于ssh key拉取代码
#jenkins服务器配置
ssh-keygen #生成公钥
cat /root/.ssh/id_rsa.pub #复制公钥
gitlab web界面设置中添加 ssh密钥 #粘贴公钥
git clone git@10.0.0.3:root/service.git #此时已经完成免密码克隆
#配置jenkins 到 gitlab非交互拉取代码
cat /root/.ssh/id_rsa #复制私钥
1,jenkins凭据,添加全局凭据,ssh-key,用户名:root,key:粘贴
2,创建任务
3,丢弃旧的构建,保留30天,保留10个
4,源码管理: Git,URL:git@10.0.0.3:root/service.git
5,构建后操作: 发送邮件 18559002373@163.com
6,立即构建测试
cat /var/lib/jenkins/workspace/jenkins-web3/index.html #已实现非交互拉取代码
#将代码全部部署到后端web服务器
passwd www #后端服务器用户设置密码
ssh-copy-id www@10.0.0.18 #jenkins与后端服务器做免密钥登录
vim /var/lib/jenkins/jenkins-tomcat.sh
#!/bin/bash
cd /var/lib/jenkins/workspace/jenkins-web3/
ssh www@10.0.0.8 "catalina.sh stop && rm -rf /data/tomcat/webapps/myapp/*"
ssh www@10.0.0.18 "catalina.sh stop && rm -rf /data/tomcat/webapps/myapp/*"
ssh www@10.0.0.28 "catalina.sh stop && rm -rf /data/tomcat/webapps/myapp/*"
scp -r ./* www@10.0.0.8:/data/tomcat/webapps/myapp/
scp -r ./* www@10.0.0.18:/data/tomcat/webapps/myapp/
scp -r ./* www@10.0.0.28:/data/tomcat/webapps/myapp/
ssh www@10.0.0.8 "catalina.sh start"
ssh www@10.0.0.18 "catalina.sh start"
ssh www@10.0.0.28 "catalina.sh start"
chmod a+x /var/lib/jenkins/jenkins-tomcat.sh
web界面
1,修改任务jenkins-web3
2,源码管理: Git,URL:git@10.0.0.3:root/service.git
3,构建: 执行shell命令: bash /var/lib/jenkins/jenkins-tomcat.sh
4,构建后操作: 发送邮件 18559002373@163.com
5,构建即可,查看终端输出,已部署完成
#浏览器访问负载均衡服务器:http://10.0.0.7:8080/myapp/
企业代码回滚
vim /var/lib/jenkins/jenkins-tomcat-huigun.sh
#!/bin/bash
cd /var/lib/jenkins/workspace/jenkins-web4/
git reset --hard HEAD^
ssh www@10.0.0.8 "catalina.sh stop && rm -rf /data/tomcat/webapps/myapp/*"
ssh www@10.0.0.18 "catalina.sh stop && rm -rf /data/tomcat/webapps/myapp/*"
ssh www@10.0.0.28 "catalina.sh stop && rm -rf /data/tomcat/webapps/myapp/*"
scp -r ./* www@10.0.0.8:/data/tomcat/webapps/myapp/
scp -r ./* www@10.0.0.18:/data/tomcat/webapps/myapp/
scp -r ./* www@10.0.0.28:/data/tomcat/webapps/myapp/
ssh www@10.0.0.8 "catalina.sh start"
ssh www@10.0.0.18 "catalina.sh start"
ssh www@10.0.0.28 "catalina.sh start"