Jenkins 使用ansible plugin 配置
sshpass安装tar -zxvf sshpass-1.06.tar.gzcd sshpass-1.06./configuremakemake install
两种方法一种直接使用sh 执行ansible命令,另外一种使用jenkins ansible插件
两种方法都需要安装ansible。个人觉得使用sh执行ansible命令更简单。使用插件也没发现有什么其它好处(除了pipeline看起来比较好看之外)。这个问题欢迎大家讨论。
第一种方法:使用sh执行ansible命令
安装ansible(详见下文),配置credential(详见下文),安装sshpass(避免使用明文密码,安装方法详见下文),pipeline如下。
stage('Deploy') {
steps {
dir('Jenkinsfile/ansible') {
withCredentials([usernamePassword(credentialsId: 'ansible_credential_for_ltktix0ipms04', passwordVariable: 'password', usernameVariable: 'username')]) {
sh 'sshpass -p $password ansible-playbook test_ansible.yml -i test_ansible_inventory -u $username -k'
}
}
}
}
第二种方法:使用ansible插件
1. 安装Ansible
(略)
yum安装,源码编译安装,SUSE使用zypper 命令安装
(可以使用163的源:zypper ar -f http://mirrors.163.com/openSUSE/distribution/openSUSE-stable/repo/oss/ 163_suse_stable)
2. 安装jenkins ansible plugin插件
如果使用多个版本的ansible可以通过Global Tool Configuration配置
Configure Ansible in “Global Tool Configuration”
Jenkins Navigate Menu: “Jenkins” -> “Manage Jenkins” -> “Global Tool Configuration”
3. 配置ansible如何连接目标服务器
有几种方式供选择,一种是配置ssh互信。另外一种是使用Jenkins Credentials(Jenkins Credentials又分为两种:一种是Username with password,一种是SSH Username with private key)。方法各有优缺点,简单如下:
- 使用ssh互信,优点是当服务器密码修改,不用额外操作。但是每台Jenkins都需要配置与目标服务器的互信。这样也有依赖关系。
- 使用Jenkins的Credentials方法,不需要每台jenkins服务器配置ssh互信,但是当服务器密码修改时,credential的密码也需要做对应修改。
- 如果使用Jenkins的Credentials方法,则推荐使用SSH Username with private key方式,因为这种方式不需要安装sshpass命令。如果使用Username with password则需要安装sshpass命令。相互依赖越少越好,所以推荐使用private方式。
a. 配置SSH互信
$ ssh-keygen -f ~/.ssh/id_rsa -N ‘’
$ ssh-copy-id -i ~/.ssh/id_rsa.pub autodeploy@webserver-01
b. 配置Jenkins Credentials
如下截图,可见两种,第一种Username with password,第二种SSH Username with private key
具体配置方法略
c. 如果使用sername with password 方式,则需要安装sshpass
tar -zxvf sshpass-1.06.tar.gz
cd sshpass-1.06
./configure
make
make install
3. Jenkins Pipeline 中使用ansible插件
建议将playbook和inventory都保存在git中而不是jenkins服务器上,这样就不依赖于某台服务器,而且playbook和inventory文件也有了版本管理。
Ansible插件的具体使用方法参见:https://wiki.jenkins.io/display/JENKINS/Ansible+Plugin
stage('Deploy') {
steps {
dir('Jenkinsfile/ansible') {
ansiblePlaybook(
credentialsId: 'ansible_credential_ID',
inventory: 'test_ansible_inventory',
playbook: 'test_ansible.yml'
)
}
}
}
更多推荐
所有评论(0)