Freestyle Job实现静态网站部署交付(接Jenkins+Gitlab+Ansible自动化部署(四)https://www.cnblogs.com/zd520pyx1314/p/10244504.html

  • 环境构建
  • 编写ansible playbook脚本实现静态网页远程部署
  • 将playbook部署脚本提交到GitLab仓库
  • 构建Freestyle Job任务框架
  • Jenkins集成Ansible与Gitlab实现静态网页的自动化部署

首先确定自己的环境已经准备完毕。

登录gitlab查看

登录Jenkins首页

登录Jenkins主机查看Ansible2.5+python 3.6虚拟环境

  1. $ ssh root@192.168.244.131
  2. Last login: Wed Jan :: from 192.168.244.1
  3. [root@jenkins ~]# su - deploy
  4. Last login: Wed Jan :: CST on pts/
  5. [deploy@jenkins ~]$ source /home/deploy/.py3-a2.-env/bin/activate (.py3-a2.-env) [deploy@jenkins ~]$ source /home/deploy/.py3-a2.-env/ansible/hacking/env-setup -q
  6. (.py3-a2.-env) [deploy@jenkins ~]$ ansible --version
  7. ansible 2.5. (stable-2.5 c748512c4c) last updated // :: (GMT +)
  8. config file = None
  9. configured module search path = ['/home/deploy/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  10. ansible python module location = /home/deploy/.py3-a2.-env/ansible/lib/ansible
  11. executable location = /home/deploy/.py3-a2.-env/ansible/bin/ansible
  12. python version = 3.6. (default, Jan , ::) [GCC 4.8. (Red Hat 4.8.-)]
  13. (.py3-a2.-env) [deploy@jenkins ~]$

准备就绪,开始编写ansible playbook脚本实现静态网页远程部署,打开Git bash命令行,将之前创建好的ansible-playbook-repo仓库clone到本地:

  1. xueji@xueji MINGW64 ~
  2. $ git config --global http.sslVerify false
  3. xueji@xueji MINGW64 ~
  4. $ cd Desktop/repo/
  5. $ git clone https://gitlab.example.com/root/ansible-playbook-repo.git
  6. Cloning into 'ansible-playbook-repo'...
  7. remote: Enumerating objects: , done.
  8. remote: Counting objects: % (/), done.
  9. remote: Total (delta ), reused (delta )
  10. Unpacking objects: % (/), done.
  11. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo (master)
  12. $ ll
  13. total
  14. -rw-r--r-- xueji 1 : ansible-playbook.txt
  15. drwxr-xr-x xueji 1 : nginx_playbooks/
  16. -rw-r--r-- xueji 7 : nginx-freestyle-job.sh
  17. drwxr-xr-x xueji 1 : test_playbooks/

开始配置

  1. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  2. $ ll
  3. total
  4. -rw-r--r-- xueji 7 : deploy.retry
  5. -rw-r--r-- xueji 7 : deploy.yml
  6. drwxr-xr-x xueji 1 : inventory/
  7. drwxr-xr-x xueji 1 : roles/
  8.  
  9. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  10. $ vim deploy.yml
  11. - hosts: "nginx"
  12. gather_facts: true
  13. remote_user: root
  14. roles:
  15. - nginx
  16.  
  17. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  18. $ vim inventory/prod
  19. [nginx]
  20. test.example.com
  21.  
  22. [nginx:vars]
  23. server_name=test.example.com
  24. port=
  25. user=deploy
  26. worker_processes=
  27. max_open_file=
  28. root=/www
  29.  
  30. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  31. $ vim inventory/dev
  32. [nginx]
  33. test.example.com
  34.  
  35. [nginx:vars]
  36. server_name=test.example.com
  37. port=
  38. user=deploy
  39. worker_processes=
  40. max_open_file=
  41. root=/www
  42.  
  43. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  44. $ vim roles/nginx/files/health_check.sh
  45. #!/bin/sh
  46.  
  47. URL=$
  48.  
  49. curl -Is http://$URL > /dev/null && echo "The remote side is healthy" || echo "The remote side is failed, please check"
  50.  
  51. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  52. $ cat roles/nginx/files/index.html
  53. This is my first website
  54.  
  55. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  56. $ vim roles/nginx/templates/nginx.conf.j2
  57. # For more information on configuration, see:
  58. user {{ user }};
  59. worker_processes {{ worker_processes }};
  60.  
  61. error_log /var/log/nginx/error.log;
  62.  
  63. pid /var/run/nginx.pid;
  64.  
  65. events {
  66. worker_connections {{ max_open_file }};
  67. }
  68.  
  69. http {
  70. include /etc/nginx/mime.types;
  71. default_type application/octet-stream;
  72.  
  73. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  74. '$status $body_bytes_sent "$http_referer" '
  75. '"$http_user_agent" "$http_x_forwarded_for"';
  76.  
  77. access_log /var/log/nginx/access.log main;
  78.  
  79. sendfile on;
  80. #tcp_nopush on;
  81.  
  82. #keepalive_timeout ;
  83. keepalive_timeout ;
  84.  
  85. #gzip on;
  86.  
  87. # Load config files from the /etc/nginx/conf.d directory
  88. # The default server is in conf.d/default.conf
  89. #include /etc/nginx/conf.d/*.conf;
  90. server {
  91. listen {{ port }} default_server;
  92. server_name {{ server_name }};
  93.  
  94. #charset koi8-r;
  95.  
  96. #access_log logs/host.access.log main;
  97.  
  98. location / {
  99. root {{ root }};
  100. index index.html index.htm;
  101. }
  102.  
  103. error_page 404 /404.html;
  104. location = /404.html {
  105. root /usr/share/nginx/html;
  106. }
  107.  
  108. # redirect server error pages to the static page /50x.html
  109. #
  110. error_page 500 502 503 504 /50x.html;
  111. location = /50x.html {
  112. root /usr/share/nginx/html;
  113. }
  114.  
  115. }
  116.  
  117. }
  118.  
  119. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  120. $ vim roles/nginx/tasks/main.yml
  121. - name: Disable system firewall
  122. service: name=firewalld state=stopped
  123.  
  124. - name: Disable SELINUX
  125. selinux: state=disabled
  126.  
  127. - name: setup nginx yum source
  128. yum: pkg=epel-release state=latest
  129.  
  130. - name: write then nginx config file
  131. template: src=roles/nginx/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
  132.  
  133. - name: create nginx root folder
  134. file: 'path={{ root }} state=directory owner={{ user }} group={{ user }} mode=0755'
  135.  
  136. - name: copy index.html to remote
  137. copy: 'remote_src=no src=roles/nginx/files/index.html dest=/www/index.html mode=0755'
  138.  
  139. - name: restart nginx service
  140. service: name=nginx state=restarted
  141.  
  142. - name: run the health check locally
  143. shell: "sh roles/nginx/files/health_check.sh {{ server_name }}"
  144. delegate_to: localhost
  145. register: health_status
  146.  
  147. - debug: msg="{{ health_status.stdout }}"

将配置好的文件,提交到远程gitlab

  1. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
  2. $ cd ~/Desktop/repo/ansible-playbook-repo/
  3.  
  4. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo (master)
  5. $ git add .
  6.  
  7. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo (master)
  8. $ git commit -m"First commit"
  9. [master 06431dc] First commit
  10. files changed, deletions(-)
  11. delete mode test_playbooks/deploy.retry
  12. delete mode test_playbooks/deploy.yml
  13. delete mode test_playbooks/inventory/dev
  14. delete mode test_playbooks/inventory/prod
  15. delete mode test_playbooks/roles/nginx/files/health_check.sh
  16. delete mode test_playbooks/roles/nginx/files/index.html
  17. delete mode test_playbooks/roles/nginx/tasks/main.yml
  18. delete mode test_playbooks/roles/nginx/templates/nginx.conf.j2
  19.  
  20. xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo (master)
  21. $ git push origin master
  22. Enumerating objects: , done.
  23. Counting objects: % (/), done.
  24. Delta compression using up to threads
  25. Compressing objects: % (/), done.
  26. Writing objects: % (/), bytes | 212.00 KiB/s, done.
  27. Total (delta ), reused (delta )
  28. To https://gitlab.example.com/root/ansible-playbook-repo.git
  29. 169dec7..06431dc master -> master

返回到Jenkins web管理页,点击“New 任务”

添加描述

添加Git仓库(该仓库地址即为上述配置的ansible-playbook-repo的仓库地址)

参数化构建过程

添加构建步骤

在执行shell弹出的输入框内输入以下内容

  1. #/bin/sh
  2.  
  3. set +x
  4. source /home/deploy/.py3-a2.-env/bin/activate
  5. source /home/deploy/.py3-a2.-env/ansible/hacking/env-setup -q
  6.  
  7. cd $WORKSPACE/nginx_playbooks
  8. ansible --version
  9. ansible-playbook --version
  10.  
  11. ansible-playbook -i inventory/$deploy_env ./deploy.yml -e project=nginx -e branch=$branch -e env=$deploy_env

点击“Save”,然后点击“Build with Parameters”,在右侧下拉列表中选择dev,点击“Build”

查看输出信息

验证目标主机是否部署成功,在浏览器输入test.exmaple.com查看

前提是保证本地windows主机下的C:\Windows\System32\drivers\etc\hosts文件中末尾有如下对应关系

  1. 192.168.244.130 gitlab.example.com
  2. 192.168.244.131 jenkins.example.com
  3. 192.168.244.132 ansible.example.com
  4. 192.168.244.133 test.example.com

可以看到已经成功部署~

Jenkins+Gitlab+Ansible自动化部署(五)的更多相关文章

  1. Jenkins+Gitlab+Ansible自动化部署(六)

    Pipeline Job实现Nginix+MySQL+PHP+Wordpress实现自动化部署交付(Jenkins+Gitlab+Ansible自动化部署(五)https://www.cnblogs. ...

  2. Jenkins+Gitlab+Ansible自动化部署(三)

    接Jenkins+Gitlab+Ansible自动化部署(一)https://www.cnblogs.com/zd520pyx1314/p/10210727.html 和(二)https://www. ...

  3. Jenkins+Gitlab+Ansible自动化部署(一)

    首先准备实验环境 虚拟机 主机名 IP地址 服务 系统版本 内核版本 Vmware Workstation 14 gitlab.example.com 192.168.244.130 gitlab  ...

  4. Jenkins+Gitlab+Ansible自动化部署(四)

    接Jenkins+Gitlab+Ansible自动化部署(三)https://www.cnblogs.com/zd520pyx1314/p/10235394.html Jenkins应用 Jenkin ...

  5. Jenkins+Gitlab+Ansible自动化部署(二)

    接Jenkins+Gitlab+Ansbile自动化部署(一):https://www.cnblogs.com/zd520pyx1314/p/10210727.html Ansible的配置与部署 工 ...

  6. 【开发工具】Jenkins+Gitlab实现自动化部署

    我在尝试在容器中安装Jenkins时,初衷是希望使用docker in docker 的模式来实现Jenkins slave容器按需创建.在实现的时候需要在Jenkins 中安装Kubernetes插 ...

  7. 基于Jenkins+Gitlab的自动化部署实战

    故事背景 一个中小型企业,是典型的互联网公司,当初期的时候可能运维只能标配到2~3人,此时随着公司的发展,项目会逐渐增多.前期部署项目可能都是手动的, 俗称“人肉部署”,这简直是无比的痛苦,不能忍受的 ...

  8. jenkins +gitlab +docker 自动化部署tomcat 项目

    实验环境 实验设备 三台服务器 centos 7.X 以上 内存 2-3G左右 192.168.1.195 (jenkins最新+ git 2.8+maven 3.5 +tomcat 8+java1. ...

  9. 从Docker 到Jenkins 到Ansible的部署经验

    从Docker 到Jenkins 到Ansible的部署经验 工作中,除了开发功能,还负责系统的部署工作.我从频繁的部署工作中,逐渐找到了一些偷懒的方法.从传统的Java -jar命令启动服务,到通过 ...

随机推荐

  1. listen 74

    Genes Link Touch and Hearing Sound and touch may seem completely separate, except possibly when play ...

  2. LinkedList_1.打印两个有序链表的公共部分

    思路: 实例化出两个链表($link_a, $link_b),比较连个链表当前元素的大小,谁小谁执行next()方法继续比较,当出现相当的时候把相等的值塞入数组$common里,当两个链表有一个元素比 ...

  3. linux命令学习笔记(54):ping命令

    Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器, 看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试” ...

  4. PHP中读写文件

    在PHP中读写文件,可以用到一下内置函数: 1.fopen(创建文件和打开文件) 语法: 复制代码代码如下:fopen(filename,mode) filename,规定要打开的文件.mode,打开 ...

  5. PS 图像调整— — gain and bias

    clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorithm'); Image=im ...

  6. BZOJ_3672_ [Noi2014]购票_CDQ分治+斜率优化

    BZOJ_3672_ [Noi2014]购票_CDQ分治+斜率优化 Description  今年夏天,NOI在SZ市迎来了她30周岁的生日.来自全国 n 个城市的OIer们都会从各地出发,到SZ市参 ...

  7. Trie 树内存消耗问题

    大家都知道,Trie树(又称字典树)是一种树型数据结构,用于保存大量的字符串.它的优点是:利用字符串的公共前缀来节约存储空间. 相对来说,Trie树是一种比较简单的数据结构,比较易于理解.话说上帝是公 ...

  8. bzoj 4592(洛谷 4344) [Shoi2015]脑洞治疗仪——线段树上二分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4592 1操作就是用线段树来二分找到第一个有 k 个0的位置. 在洛谷上A了,与暴力和网上题解 ...

  9. css3 实现loading效果

    1 圆点渐入渐出 要点: 缩放和透明度的变化,循环变化 <div class="demo1"></div> .demo1{ width: 40px; hei ...

  10. Haproxy 安装配置详解-端口映射

    Haproxy 简介: HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点, ...