【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中文文档