实验环境:
     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触发构建,验证查看页面是否变化
 
  |