【DEVOPS】Jenkins集成Ansible的两种方式

本文对Jenkins集成Ansible实现自动化部署的两种方式进行分别的介绍。

1. 概述

本文将介绍Jenkins集成Ansible的两种方式,分别说明其实现方式和优缺点,方便读者快速抉择。

2. 集成

2.1 专门的Jenkins插件

具体的安装过程这里就不赘述了,这里只大概列举下安装步骤:

  1. 在Jenkins所在服务器上,使用pip方式安装Ansible(当然你用其他方式也可以)。
  2. 安装Jenkins的Ansible插件。 这里给出一个Ansible插件地址。
  3. 配置Ansible插件。
    【DEVOPS】Jenkins集成Ansible的两种方式_第1张图片

Pipeline相关:

stage('部署'){
     

	steps {
     
		// 这里的 ansible2.10.2 和上面截图中的配置对应
		// 以下脚本可以借助Jenkins提供pipeline syntax 来辅助生成。需要注意的是 辅助工具生成的字符串使用的是单引号, 如果你要使用如下图中的占位符, 那就需要将单引号改为双引号。
		ansiblePlaybook( installation: 'ansible2.10.2', 
			inventory: "${env.WORKSPACE}/doc/ansible/hosts", 
			playbook: "${env.WORKSPACE}/doc/ansible/playbook.yaml")
					   
	}
}

相应的hosts, playbook.yaml里的内容如下:

##### 目录结构如下:
doc/
  ansible/
    host_vars/
      172.16.3.170
    hosts
    playbook.yaml
src/                           # Maven标准结构
Jenkinsfile

##### hosts
[windows_170]
172.16.3.170

##### 172.16.3.170  (是的, 这个是个文件名)
ansible_ssh_user: "administrator"
ansible_ssh_pass: "password"
ansible_ssh_port: 5985 
ansible_connection: "winrm" 
ansible_winrm_server_cert_validation: "ignore"

##### playbook.yaml
---
- hosts: windows_170
  tasks:
    - debug: msg="fulizhe------------"

优点:

  1. Ansible脚本被SCM版本控制,有助于追踪历史记录。
  2. Ansible脚本与项目捆绑,容易查找并进行二次开发。

缺点:

  1. 积累难以复用,很容易陷入各自为战。
  2. 运维工作交给研发,在DEVOPS推进前期阻力比较大。
2.2 直接借助SSH

关键字sshPublisher

sshPublisher(
	publishers: [
		sshPublisherDesc(
		configName: 'ansibleServerIn254',
		transfers: [
			sshTransfer(
			excludes: '',
			execCommand: '''
			  cd /etc/ansible/playbooks/common
			  ansible-playbook windows_deploy_sb_common.yaml \
			  -e "APP_VERSION=${DEPLOY_VERSION}" -e "GROUP_ID_NEW=${GROUP_ID}" \
			  -e "ARTIFACT_ID=${ARTIFACT_ID}" -e "TARGET=${SERVER}" -e "SERVER_PORT=${SERVER_PORT}"              			   
			   
			''',
			)
		],
		verbose: true
	)
 ]
)

优点:

  1. Jenkins和Ansible分开部署,各自发展,避免一锅端。
  2. Ansible脚本集中管理,方便知识共享。

缺点:

  1. 个性化比较麻烦,比如针对已有项目的适配。

3. 参考

  1. 《Jenkins2.x实践指南》 12.2.2小节
  2. Jenkins官方插件Ansible

你可能感兴趣的:(DevOps,DEVOPS,Jenkins,Ansible)