zoukankan      html  css  js  c++  java
  • 【Jenkins使用之十】jenkins自动部署

    环境
      CentOS Linux release 7.6.1810
      jdk1.8.0_65
      apache-tomcat-8.5.45
      Jenkins-2.235.5
      apache-maven-3.6.3
      git-2.9.5
      gradle-6.6.1
      SonarQube-6.7.7(LTS)
      sonar-scanner-cli-4.2.0.1873
    拓扑:
      node1:安装GitLab、SonarQube
      node2:安装Jenkins、Git、MAVEN

    一、部署于发布
    部署不等同于发布,部署是将程序安装在服务器上,但并没有开启相关功能;发布才是将功能呈现在客户面前。

    二、自动化部署工具-Ansible
    1、Ansible使用SSH协议与客户端通信,因此相比Puppet、Chef是去客户端的;
    2、Ansible自动化部署基础:
    (1)使用yml格式文件来描述部署逻辑,通常是一个名为playbook.yml的文件;
    (2)使用ini格式文件组织受控机器inventory的逻辑,名为hosts;
    Ansible是导演,受控机器列表inventory为演员列表,开发者是编剧。开发者只要把剧本playbook.yml写好,Ansible拿着剧本与inventory一一对上号,演员就会按照剧本如实表演,不会有任何个人发挥。

    三、Jenkins与Ansible集成
    1、Jenkins安装Ansible插件:Ansible plugin
    Jenkins的Ansible插件提供两个步骤:
    (1)ansiblePlaybook步骤
    执行ansible-playbook命令。

    (2)ansibleVault步骤
    ansibleVault步骤所做的事情就是就是执行Ansible提供的ansible-vault命令,该命令通常用于对敏感数据进行加解密。其中vaultCredentialsId是密码的凭证ID,必要参数。

    2、安装Ansible
    (1)主控机器也就是Jenkins所在机器安装Ansible,并配置安装路径

    [root@node2 ~]# yum install epel-release -y && yum install ansible -y
    [root@node2 ~]# ansible --version
    ansible 2.9.10
      config file = /etc/ansible/ansible.cfg
      configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python2.7/site-packages/ansible
      executable location = /usr/bin/ansible
      python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

    (2)配置ansible不进行host key检查

    [root@node2 ~]# cat /etc/ansible/ansible.cfg
    [defaults]
    host_key_checking = False

    3、jenkins手工添加登录受控机器的登录凭证。
    Ansible与受控机器的连接的凭证需要我们在Jenkins上手工添加,比如这里要使用ansible登录192.168.125.127上。

    4、编写playbook.yml和hosts

    playbook.yml:

    ---
    - hosts: example
      tasks: 
       - debug: msg="{{ lookup('env','BUILD_TAG') }}"

    hosts:

    [example]
    192.168.125.127

    5、编写pipeline

    pipeline{
        agent any
        //用来指定哪些任务可以拷贝
        options {
            copyArtifactPermission('archivetest*');
        }
        stages{
            stage('Build'){
                steps{
                    //打包
                    sh "mvn clean package"
                    echo "${env.WORKSPACE}"
                }
            }
            stage('Deploy'){
                steps{
                    //调用ansible
                    ansiblePlaybook(                      
                         installation: 'ansible-2.9.10', 
                         playbook: "${env.WORKSPACE}/playbook.yml",
                         inventory: "${env.WORKSPACE}/hosts",                     
                         credentialsId: '125.127-ID'
                    )
                }
            }
        }
        //事后生成归档
        post{
            always{
                archiveArtifacts artifacts: 'target/**/*.jar',fingerprint: true
            }
        }
    }

    注意:使用${env.WORKSPACE} 外面要用双引号。

    6、构建结果

    参考:
    pipeline+gitlab+ansible简单部署案例
    ansible中文文档
  • 相关阅读:
    Python实现简单中文词频统计示例
    Python组合类型笔记
    Python中turtle绘图学习笔记和实例
    Python爬虫入门
    与Python的第一次见面
    Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(四)
    Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(三)
    Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(二)
    Delphi开发人员指南 第一部份快速开发的基础 第1章 Delphi下的Windows编程(一)
    Java开发环境安装 配置 与 Eclipse安装 新建Project
  • 原文地址:https://www.cnblogs.com/cac2020/p/13712200.html
Copyright © 2011-2022 走看看