实验环境:


gitlab(4G)

jenkins(3G)

slave/ansible

nginx

tomcat

tomcat

192.168.1.2/24

192.168.1.3/24

192.168.1.4/24

192.168.1.5/24

192.168.1.6/24

192.168.1.7/24

架构原理:使用gitlab作为代码版本管理系统,jenkins作为代码持续集成测试,结合ansible实现批量部署多台web服务器,nginx作为反向代理服务器代理后端web集群。

自动化部署流程:

1.git代码拉取

2.编译构建

3.推送到远程web服务器

4.备份web服务器上网站根目录的程序文件

5.部署新的程序文件到网站根目录

6.重启web服务验证访问

部署:

  1. 安装docker(gitlab服务器和jenkins服务器)

https://blog.csdn.net/qq_24760259/article/details/106785283

  1. 安装gitlab
###########安装配置gitlab##############
mkdir /opt/gitlab
GITLAB_HOME=/opt/gitlab # 数据持久化目录
docker run --detach \
--hostname gitlab.ctnrs.com \
--publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

[root@localhost ~]# docker exec -it gitlab bash
root@gitlab:/# gitlab-ctl reconfigure #加载配置并启动

页面登录后新建用户--->新建组--->将用户加入组中(赋予作者权限)--->在组中新建项目

#############上传java网站代码#############
yum install git
git clone https://github.com/lizhenliang/tomcat-java-demo
cd tomcat-java-demo
git init #初始化为.git的目录
git remote add origin http://gitlab.ctnrs.com/group-lz/java-demo.git
#修改为自己的仓库地址
cat .git/config
url = http://gitlab.ctnrs.com/group-lz/java-demo.git

git add . #添加到暂存区
git commit -m "java-demo" #提交到本地仓库
git push origin master #上传到远程仓库的master分支


3.安装jenkins

############安装jenkins###########
tar zxvf jdk-8u45-linux-x64.tar.gz
mv jdk1.8.0_45 /usr/local/jdk
tar zxf apache-maven-3.5.0-bin.tar.gz
mv apache-maven-3.5.0 /usr/local/maven
docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -u root -v /opt/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /usr/local/maven:/usr/local/maven -v /usr/local/jdk:/usr/local/jdk -v /etc/localtime:/etc/localtime --restart=always --add-host=gitlab.ctnrs.com:192.168.0.5 --name jenkins jenkins/jenkins:lts
#########配置jdk和mvn环境##########
# vi /etc/profile
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$PATH:/usr/local/jdk/bin
export JAVA_HOME PATH
# source /etc/profile

配置插件加速器:
docker exec -it jenkins bash
cd /var/jenkins_home/updates
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
jenkins访问页面非常慢的办法:
cat /opt/jenkins_home/hudson.model.UpdateCenter.xml
修改为以下地址:
http://mirror.xmission.com/jenkins/updates/update-center.json
#重启jenkins服务
docker restart jenkins或者http://ip:8080/restart

配置域名解析
cat /etc/hosts
192.168.1.5 gitlab.ctnrs.com


安装jenkins需要的插件:

ansible 插件

系统管理---->节点管理----新建节点(配置slave从节点)

在jenkins客户端执行并创建工作目录/opt/jenkins:

安装Agent 1、节点安装JDK 2、下载agent.jar 3、使用nohup xxx &>slave.log &

新建项目—>进入到项目配置页面(配置项目)

4.在jnekins的slave上安装ansible,maven,jdk

配置域名解析
cat /etc/hosts
192.168.1.5 gitlab.ctnrs.com
#安装ansible
yum -y install ansible
#安装git工具 (jenkins工作节点要去远程仓库拉取代码)
yum -y install git
#安装jdk和maven
tar zxvf jdk-8u45-linux-x64.tar.gz
mv jdk1.8.0_45 /usr/local/jdk
tar zxf apache-maven-3.5.0-bin.tar.gz
mv apache-maven-3.5.0 /usr/local/maven
#配置环境变量
vi /etc/profile
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$PATH:/usr/local/maven/bin
export JAVA_HOME PATH
#加载生效
source /etc/profile

#配置文件修改:
cat /etc/ansible/hosts #主机清单文件
[webserver1]
192.168.1.2
192.168.1.5

cat /etc/ansible/ansible.cfg #配置文件
#主机清单 inventory 文 件,就是一些需要连接的 主机
inventory = /etc/ansible/hosts
#并发进程数。多少个进程 同时工作,可以根据控制 主机的性能和被管理节点 的数量来确定。
forks = 5
#提权
sudo_user = root
#连接被管理服务器默认端 口
remote_port = 22
#是否检查 SSH 主机的密钥
host_key_checking = False
#SSH 连接超时时间,单位 秒,可以增大值
timeout = 10
#默认不记录日志,如果想 记录日志需要开启指定日 志文件,需要 ansible 用 户有写入日志权限
log_path = /var/log/ansible.log
#私钥 key
private_key_file = /root/.ssh/id_rsa

#使用root账户生成一对密钥
ssh-keygen
ssh-copy root@x.x.x.x (拷贝到要部署的web服务器上实现免密登录)
#使用ansible命令测试一下
ansible webserver1 -m shell -a "ls /root" -u root
#在/opt/jenkins目录下新建文件playbook.yml
cat playbook.yml
---
- hosts: "{{env}}"
tasks:
- name: copy file
copy: src=/opt/jenkins/workspace/java-demo/target/ly-simple-tomcat-0.0.1-SNAPSHOT.war dest=/tmp
- name: deploy
shell: |
tomcat=/usr/local/tomcat
cd $tomcat/webapps
mv ROOT.war /data/backup/$(date +%F_%T)_ROOT.war
mv /tmp/ly-simple-tomcat-0.0.1-SNAPSHOT.war $tomcat/webapps/ROOT.war
pid=$(ps -ef |grep tomcat |egrep -v "grep|$$" |awk '{print $2}')
[ -n $pid ] && kill -9 $pid
nohup /usr/local/tomcat/bin/startup.sh


5.nginx反向代理服务器配置

#配置nginx yum源(使用yum安装nginx)
[root@localhost ~]# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
#配置nginx虚拟主机配置文件
[root@localhost ~]# cat /etc/nginx/conf.d/default.conf
upstream java-demo {
server 192.168.1.2:8080;
server 192.168.1.5:8080;
}
server {
listen 80;
server_name localhost;

#access_log /var/log/nginx/host.access.log main;

location / {
root /usr/share/nginx/html;
proxy_pass http://java-demo;
}
}

#重启nginx
systemctl restart nginx

6.tomcat服务器(两台web服务器一样的配置):

#安装tomcat
tar zxvf jdk-8u45-linux-x64.tar.gz
mv jdk1.8.0_45 /usr/local/jdk
tar -zxf apache-tomcat-8.5.59.tar.gz
mv apache-tomcat-8.5.59 /usr/local/tomcat
cd /usr/local/tomcat/webapps/
rm -rf *
touch ROOT.war
#新建备份数据目录
mkdir /data/backup -p
#配置jdk环境变量
vi /etc/profile
JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$PATH:/usr/local/maven/bin
export JAVA_HOME PATH
#加载生效
source /etc/profile

验证:

访问nginx反向代理服务器

192.168.1.5:80

访问tomcat web服务器1

192.168.1.6:8080

访问tomcat web服务器2

192.168.1.7:8080

模拟提交代码验证:

#修改页面代码
vim java-demo/src/main/resources/templates/index.ftl

git add .
git commit -m "demo"
git push origin master

提交代码等待jenkins触发构建,验证查看页面是否变化