一、概念图
二、演示过程
[root@gitleb ~]# git config --global http.sslVerify false #关闭安全认证,避免clone 时报错证书错误 [root@gitleb ~]# git clone https://gitlab.example.com/root/ansible-playbook-repo.git [root@gitleb ~]# cd ansible-playbook-repo.git 修改文件内容后进行提交 [root@gitleb nginx_playbooks]# git add . [root@gitleb nginx_playbooks]# git commit -m"This is my first commit" [root@gitleb nginx_playbooks]# git push origin master
目录结构:
文件内容:
1 [root@gitleb nginx_playbooks]# ll 2 总用量 8 3 -rw-r--r-- 1 root root 17 2月 23 15:46 deploy.retry 4 -rw-r--r-- 1 root root 79 2月 23 15:49 deploy.yml 5 drwxrwxr-x 2 root root 29 2月 23 15:53 inventory 6 drwxrwxr-x 3 root root 19 2月 23 15:54 roles 7 [root@gitleb nginx_playbooks]# cat deploy.retry 8 test.example.com 9 [root@gitleb nginx_playbooks]# cat deploy.yml 10 - hosts: "nginx" 11 gather_facts: true 12 remote_user: root 13 roles: 14 - nginx 15 16 [root@gitleb nginx_playbooks]# cat inventory/prod 17 [nginx] 18 test.example.com 19 20 [nginx:vars] 21 server_name=test.example.com 22 port=80 23 user=deploy 24 worker_processes=4 25 max_open_file=65505 26 root=/www 27 28 [root@gitleb nginx_playbooks]# cat inventory/dev 29 [nginx] 30 test.example.com 31 32 [nginx:vars] 33 server_name=test.example.com 34 port=80 35 user=deploy 36 worker_processes=4 37 max_open_file=65505 38 root=/www 39 40 [root@gitleb nginx_playbooks]# cat roles/nginx/files/health_check.sh 41 #!/bin/sh 42 43 URL=$1 44 45 curl -Is http://$URL > /dev/null && echo "The remote side is healthy" || echo "The remote side is failed, please check"
46 [root@gitleb nginx_playbooks]# cat roles/nginx/files/index.html 47 This is my first website 48 49 50 [root@gitleb nginx_playbooks]# cat roles/nginx/templates/nginx.conf.j2 51 # For more information on configuration, see: 52 user {{ user }}; 53 worker_processes {{ worker_processes }}; 54 55 error_log /var/log/nginx/error.log; 56 57 pid /var/run/nginx.pid; 58 59 events { 60 worker_connections {{ max_open_file }}; 61 } 62 63 64 http { 65 include /etc/nginx/mime.types; 66 default_type application/octet-stream; 67 68 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 69 '$status $body_bytes_sent "$http_referer" ' 70 '"$http_user_agent" "$http_x_forwarded_for"'; 71 72 access_log /var/log/nginx/access.log main; 73 74 sendfile on; 75 #tcp_nopush on; 76 77 #keepalive_timeout 0; 78 keepalive_timeout 65; 79 80 #gzip on; 81 82 # Load config files from the /etc/nginx/conf.d directory 83 # The default server is in conf.d/default.conf 84 #include /etc/nginx/conf.d/*.conf; 85 server { 86 listen {{ port }} default_server; 87 server_name {{ server_name }}; 88 89 #charset koi8-r; 90 91 #access_log logs/host.access.log main; 92 93 location / { 94 root {{ root }}; 95 index index.html index.htm; 96 } 97 98 error_page 404 /404.html; 99 location = /404.html { 100 root /usr/share/nginx/html; 101 } 102 103 # redirect server error pages to the static page /50x.html 104 # 105 error_page 500 502 503 504 /50x.html; 106 location = /50x.html { 107 root /usr/share/nginx/html; 108 } 109 110 } 111 112 } 113 114 115 116 [root@gitleb nginx_playbooks]# cat roles/nginx/tasks/main.yml 117 - name: Disable system firewall 118 service: name=firewalld state=stopped 119 120 - name: Disable SELINUX 121 selinux: state=disabled 122 123 - name: setup nginx yum source 124 yum: pkg=epel-release state=latest 125 126 - name: write then nginx config file 127 template: src=roles/nginx/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf 128 129 - name: create nginx root folder 130 file: 'path={{ root }} state=directory owner={{ user }} group={{ user }} mode=0755' 131 132 - name: copy index.html to remote 133 copy: 'remote_src=no src=roles/nginx/files/index.html dest=/www/index.html mode=0755' 134 135 - name: restart nginx service 136 service: name=nginx state=restarted 137 138 - name: run the health check locally 139 shell: "sh roles/nginx/files/health_check.sh {{ server_name }}" 140 delegate_to: localhost 141 register: health_status 142 143 - debug: msg="{{ health_status.stdout }}"
三、Jenkins 开始构建
脚本
#/bin/sh set +x source /home/deploy/.py3-a2.5-env/bin/activate source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q cd $WORKSPACE/nginx-playbooks ansible --version ansible-playbook --version ansible-playbook -i inventory/$deploy_env ./deploy.yml -e project=nginx -e branch=$branch -e env=$deploy_env
查看构建日志:
构建成功 !
本地电脑添加hosts 解析后,访问我们构建的成果:
至此,利用jenkins 下的 freestyle任务,集成gitlab与ansible 成功的将静态页面部署到到远程主机中,实现了一键自动化部署,持续交付的流程操作。