实验环境:
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服务验证访问
部署:
- 安装docker(gitlab服务器和jenkins服务器)
https://blog.csdn.net/qq_24760259/article/details/106785283
- 安装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 ~] root@gitlab:/
页面登录后新建用户--->新建组--->将用户加入组中(赋予作者权限)--->在组中新建项目
yum install git git clone https://github.com/lizhenliang/tomcat-java-demo cd tomcat-java-demo git init 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
|
3.安装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
JAVA_HOME=/usr/local/jdk PATH=$JAVA_HOME/bin:$PATH:/usr/local/jdk/bin export JAVA_HOME PATH
配置插件加速器: 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
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
yum -y install ansible
yum -y install git
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 = /etc/ansible/hosts
forks = 5
sudo_user = root
remote_port = 22
host_key_checking = False
timeout = 10
log_path = /var/log/ansible.log
private_key_file = /root/.ssh/id_rsa
ssh-keygen ssh-copy root@x.x.x.x (拷贝到要部署的web服务器上实现免密登录)
ansible webserver1 -m shell -a "ls /root" -u root
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反向代理服务器配置
[root@localhost ~] [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1
[root@localhost ~] upstream java-demo { server 192.168.1.2:8080; server 192.168.1.5:8080; } server { listen 80; server_name localhost;
location / { root /usr/share/nginx/html; proxy_pass http://java-demo; } }
systemctl restart nginx
|
6.tomcat服务器(两台web服务器一样的配置):
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
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触发构建,验证查看页面是否变化
|