zoukankan      html  css  js  c++  java
  • Jenkins+Gitlab+Ansible自动化部署(五)

    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虚拟环境

    $ ssh root@192.168.244.131
    Last login: Wed Jan  9 13:40:48 2019 from 192.168.244.1
    [root@jenkins ~]# su - deploy
    Last login: Wed Jan  9 20:24:43 CST 2019 on pts/0
    [deploy@jenkins ~]$ source /home/deploy/.py3-a2.5-env/bin/activate           (.py3-a2.5-env) [deploy@jenkins ~]$ source /home/deploy/.py3-a2.5-env/ansible/hacking/env-setup -q
    (.py3-a2.5-env) [deploy@jenkins ~]$ ansible --version
    ansible 2.5.14 (stable-2.5 c748512c4c) last updated 2019/01/09 20:03:39 (GMT +800)
      config file = None
      configured module search path = ['/home/deploy/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /home/deploy/.py3-a2.5-env/ansible/lib/ansible
      executable location = /home/deploy/.py3-a2.5-env/ansible/bin/ansible
      python version = 3.6.8 (default, Jan  9 2019, 19:44:42) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
    (.py3-a2.5-env) [deploy@jenkins ~]$

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

    xueji@xueji MINGW64 ~
    $ git config --global http.sslVerify false
    xueji@xueji MINGW64 ~
    $ cd Desktop/repo/
    $  git clone https://gitlab.example.com/root/ansible-playbook-repo.git
    Cloning into 'ansible-playbook-repo'...
    remote: Enumerating objects: 3, done.
    remote: Counting objects: 100% (3/3), done.
    remote: Total 3 (delta 0), reused 0 (delta 0)
    Unpacking objects: 100% (3/3), done.
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo (master)
    $ ll
    total 9
    -rw-r--r-- 1 xueji 1049089   0 1月  10 11:57 ansible-playbook.txt
    drwxr-xr-x 1 xueji 1049089   0 1月  10 12:02 nginx_playbooks/
    -rw-r--r-- 1 xueji 1049089 312 7月  15 08:33 nginx-freestyle-job.sh
    drwxr-xr-x 1 xueji 1049089   0 1月  10 12:02 test_playbooks/

    开始配置

    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ ll
    total 2
    -rw-r--r-- 1 xueji 1049089 17 7月  17 21:06 deploy.retry
    -rw-r--r-- 1 xueji 1049089 80 7月  17 21:06 deploy.yml
    drwxr-xr-x 1 xueji 1049089  0 1月  10 12:02 inventory/
    drwxr-xr-x 1 xueji 1049089  0 1月  10 12:02 roles/
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ vim deploy.yml
    - hosts: "nginx"
      gather_facts: true
      remote_user: root
      roles:
        - nginx
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ vim inventory/prod
    [nginx]
    test.example.com
    
    [nginx:vars]
    server_name=test.example.com
    port=80
    user=deploy
    worker_processes=4
    max_open_file=65505
    root=/www
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ vim inventory/dev
    [nginx]
    test.example.com
    
    [nginx:vars]
    server_name=test.example.com
    port=80
    user=deploy
    worker_processes=4
    max_open_file=65505
    root=/www
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ vim roles/nginx/files/health_check.sh
    #!/bin/sh
    
    URL=$1
    
    curl -Is http://$URL > /dev/null && echo "The remote side is healthy" || echo "The remote side is failed, please check"
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ cat roles/nginx/files/index.html
    This is my first website
    
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ vim roles/nginx/templates/nginx.conf.j2
    # For more information on configuration, see:
    user              {{ user }};
    worker_processes  {{ worker_processes }};
    
    error_log  /var/log/nginx/error.log;
    
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  {{ max_open_file }};
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        # Load config files from the /etc/nginx/conf.d directory
        # The default server is in conf.d/default.conf
        #include /etc/nginx/conf.d/*.conf;
        server {
            listen       {{ port }} default_server;
            server_name  {{ server_name }};
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   {{ root }};
                index  index.html index.htm;
            }
    
            error_page  404              /404.html;
            location = /404.html {
                root   /usr/share/nginx/html;
            }
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /usr/share/nginx/html;
            }
    
        }
    
    }
    
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ vim roles/nginx/tasks/main.yml
    - name: Disable system firewall
      service: name=firewalld state=stopped
    
    - name: Disable SELINUX
      selinux: state=disabled
    
    - name: setup nginx yum source
      yum: pkg=epel-release state=latest
    
    - name: write then nginx config file
      template: src=roles/nginx/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
    
    - name: create nginx root folder
      file: 'path={{ root }} state=directory owner={{ user }} group={{ user }} mode=0755'
    
    - name: copy index.html to remote
      copy: 'remote_src=no src=roles/nginx/files/index.html dest=/www/index.html mode=0755'
    
    - name: restart nginx service
      service: name=nginx state=restarted
    
    - name: run the health check locally
      shell: "sh roles/nginx/files/health_check.sh {{ server_name }}"
      delegate_to: localhost
      register: health_status
    
    - debug: msg="{{ health_status.stdout }}"

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

    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo/nginx_playbooks (master)
    $ cd ~/Desktop/repo/ansible-playbook-repo/
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo (master)
    $ git add .
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo (master)
    $ git commit -m"First commit"
    [master 06431dc] First commit
     8 files changed, 122 deletions(-)
     delete mode 100644 test_playbooks/deploy.retry
     delete mode 100644 test_playbooks/deploy.yml
     delete mode 100644 test_playbooks/inventory/dev
     delete mode 100644 test_playbooks/inventory/prod
     delete mode 100644 test_playbooks/roles/nginx/files/health_check.sh
     delete mode 100644 test_playbooks/roles/nginx/files/index.html
     delete mode 100644 test_playbooks/roles/nginx/tasks/main.yml
     delete mode 100644 test_playbooks/roles/nginx/templates/nginx.conf.j2
    
    xueji@xueji MINGW64 ~/Desktop/repo/ansible-playbook-repo (master)
    $ git push origin master
    Enumerating objects: 3, done.
    Counting objects: 100% (3/3), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (2/2), done.
    Writing objects: 100% (2/2), 212 bytes | 212.00 KiB/s, done.
    Total 2 (delta 1), reused 0 (delta 0)
    To https://gitlab.example.com/root/ansible-playbook-repo.git
       169dec7..06431dc  master -> master

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

    添加描述

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

    参数化构建过程

    添加构建步骤

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

    #/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

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

    查看输出信息

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

    前提是保证本地windows主机下的C:WindowsSystem32driversetchosts文件中末尾有如下对应关系

    192.168.244.130 gitlab.example.com
    192.168.244.131 jenkins.example.com
    192.168.244.132 ansible.example.com
    192.168.244.133 test.example.com

    可以看到已经成功部署~

  • 相关阅读:
    git 合并多个commit
    git 修改 Commit Message
    git rebase 命令介绍
    git 忘记切换分支,误将代码commit到了别的分支的解决方法
    会话层的会话和传输层中的连接的区别
    Goland 安装 k8s 源码 的步骤
    Linux export 命令的作用
    Linux 执行脚本时 source 和 . 和 sh 和 ./ 的区别
    the connection to the server 6443 was refused
    Kubernetes 创建 Pod 时,背后到底发生了什么?
  • 原文地址:https://www.cnblogs.com/zd520pyx1314/p/10249094.html
Copyright © 2011-2022 走看看