前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jenkins运行ansible playbooks

Jenkins运行ansible playbooks

作者头像
DevOps云学堂
发布2020-05-27 11:12:36
3K0
发布2020-05-27 11:12:36
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

本文是关于应用程序的自动化配置和部署。如果您的架构未使用容器类型的技术(例如Docker),则可能是在Linux上安装虚拟机甚至物理服务器。在这方面,Ansible允许您通过编写playbook自动在服务器上安装和配置软件。可用的范围从最简单到最复杂,从安装软件包到安装多个软件及其完整配置。

为了应用这些roles并对其进行自定义,我们将使用yaml格式的playbook文本文件,其中包含要应用于服务器或目标服务器组的角色列表。这些playbook可能包含有价值的参数,以使我们的安装更具针对性。显然,通过源代码管理器对Playbook进行版本控制是首选的。

代码语言:javascript
复制
- hosts: "monserveur.tld"
  vars:
    mariadb_version: '10.1'
    mariadb_root_password:
      - 'monpass'
    mariadb_bind_address:
      - '0.0.0.0'
    mariadb_databases:
      - name: 'mydb'
    mariadb_users:
      - name: 'mydbuser'
        password: 'mydbpass'
        priv: 'mydb.*:ALL,GRANT'  
        host: '192.10.%.%'
  roles:
    - role: bertvv.mariadb
使用Jenkins运行playbook

这个想法不一定得到广泛传播,让诸如Jenkins这样的自动化和任务编排工具去运行Ansible playbook非常容易。因此,使用Jenkins pipeline语言,您可以使用ansible_playbook方法,这将在Jenkins作业中执行作为参数传递的playbook。

代码语言:javascript
复制
stage('Deploiement Ansible') {
    ansiblePlaybook (
      colorized: true, 
      become: true,
      playbook: 'ansible-playbooks/mariadb.yml'
   )
}

为了使其更有趣,这些playbook应该能够依靠参数来运行。例如,指定目标计算机,然后为每种类型的playbook指定一组配置。为此,通过阅读文档,我们意识到调用ansible二进制文件时完全可以传递参数

代码语言:javascript
复制
$ ansible-playbook monplaybook --extra-vars ="my var"

这非常适合我们,因为它将使我们的工作更加轻松。例如,对于我的mariaDB 10.1 Playbook,我决定配置root密码,并创建数据库和对该数据库具有管理员权限的用户(登录名,密码) 。

为了能够通过Jenkins增强这些元素的配置性,第一个想法是修改playbook以能够配置不同的元素:

代码语言:javascript
复制
- hosts: "{{ variable_host | default('monserveur.tld') }}"
  vars:
    mariadb_version: '10.1'
    mariadb_root_password:
      - '{{ variable_dbrootpassword }}'
    mariadb_bind_address:
      - '0.0.0.0'
    mariadb_databases:
      - name: '{{ variable_dbname }}'
    mariadb_users:
      - name: '{{ variable_dbuser }}'
        password: '{{ variable_dbpass }}'
        priv: '{{ variable_dbname }}.*:ALL,GRANT'  
        host: '192.10.%.%'
  roles:
    - role: bertvv.mariadb

对于要在其上运行playbook的目标机器,我们决定向用户提供一个包含我们机器信息的下拉列表,并有可能在执行作业时输入新值。该下拉列表是使用Jenkins可扩展选择参数插件构建的。

为此,在安装插件后,我们转到Administer Jenkins>系统配置。在Extensible Choice: Available Choice Providers部分中,我们添加了以下新选择列表:

选择列表,使我们能够在作业执行期间选择目标服务器

现在,让我们回到Jenkins的Job,并将必要的参数添加到我们配置的Playbook中:

通过将这些参数传递给作业执行,我们可以自动安装mariaDB,增强root密码,使用给定名称创建新数据库,创建对该数据库具有权限的用户。

但是,最后一个参数是:Ansible要在目标计算机上执行命令,有必要将登录凭据传递给计算机。为此,我们使用Jenkins凭据管理功能,该功能使以安全的方式存储秘钥。这个模块允许我们在jenkins中存储登录名/密码对:

我们可以通过添加类型为Credentials的参数,以一种简单的方式将这些凭据传递给Jenkins作业:

然后,我们编辑作业的常规脚本,以将这组参数传递给ansible shell命令:

代码语言:javascript
复制
stage('Deploiement Ansible') {
    withCredentials([usernamePassword(credentialsId: '${SUDOERIDENTIFIER}', passwordVariable: 'SUDOERPASS', usernameVariable: 'SUDOERLOGIN')]) {
        ansiblePlaybook (
          colorized: true, 
          become: true,             
          playbook: 'ansible-playbooks/mariadb.yml', 
          extras: '--extra-vars "variable_host=${HOSTNAME} variable_dbrootpassword=${ROOTPASSWORD} variable_dbname=${DBNAME} variable_dbuser=${DBUSER} variable_dbpass=${DBPASS} ansible_ssh_user=$SUDOERLOGIN ansible_ssh_pass=$SUDOERPASS ansible_sudo_pass=$SUDOERPASS"'
        )
    }
}

只需单击“使用参数启动构建”即可启动作业:

控制台结果与Ansible命令的输出相对应。

总结

因此,我们现在可以将Jenkins作业准备在任何引用的计算机上运行一次或多次,并且可以通过图形界面和作业配置简单地执行这些作业。全部运行时无需输入密码。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用Jenkins运行playbook
  • 总结
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档