【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中文文档
posted @ 2020-09-22 14:53  cac2020  阅读(619)  评论(0编辑  收藏  举报