使用Ansible Tower与Jenkins集成实现CI/CD

作者: 潘晓华Michael | 来源:发表于2019-05-26 21:59 被阅读60次

    Ansible Tower是什么?

    Ansible Tower是一个基于Web的用户界面,提供了IT自动化的企业解决方案。它有一个友好用户的仪表板来管理部署和监控资源。Ansible Tower为Ansible增加自动化,可视化管理和监控能力。

    为什么要使用Ansible Tower替换Ansible与Jenkins集成?

    使用Ansible Tower与Jenkins集成,打开了一个充满可能性的世界。
    与一篇中介绍的《Ansible与Jenkins集成实现CI/CD》进行比较,它可以从Jenkins中删除很多配置,比如部署应用的服务器的访问配置,管理playbook执行,最重要的是,避免在Jenkins端配置SSH密钥,同时Jenkins不需要知道应用程序的部署服务器地址:它可能位于公有云中,物理机中,甚至是笔记本电脑上的虚拟客户端。 把这些配置与过程都放到Ansible Tower中进行集中管理。

    Ansible Tower的组件

    Ansible Tower组件
    • Credentials: Ansible Tower在运行作业时,访问Tower外部服务或者连接主机时需要进行身份验证。Credentials则是存储这些身份验证的配置信息。
    • Projects: Project是一组Ansible playbooks的集合,它是开始使用Tower的第一个组件。Projects中的playbooks文件可以手动添加在Tower服务器的目录中,但是一般推荐使用Git等代码仓库的方式存放playbooks文件,因为这样更容易对playbooks文件进行更改与管理。
    • Inventories: Inventories是ansible Tower中的Job最终执行操作的主机,它可以通过静态方式添加,也可以使用脚本动态添加,比如访问CMDB服务、调用公有云API。
    • Job template: Job template是Ansible Job的一个模板,它可以为Job传递不同的参数,认证证书、Inventories配置等。
    • Job: Job是最终执行的任务,可以在Tower上查看Job的执行过程,及日志

    说明:当然以上说明只是各组件最简单的功能介绍,其实每个组件的功能都会更加丰富,我们可以自己部署Ansible Tower,并通过具体的使用来熟悉各组件的功能。

    怎样集成Ansible Tower与Jenkins?

    前提:部署好了Ansible Tower和Jenkins

    Ansible Tower上的设置

    • 创建用户jenkins给Jenkins调用Ansible Tower Tower
    Ansible Tower创新建用户jenkins
    • 创建Project,使用Git作为SCM Type,并给jenkins用户授权 Tower
    新建Project
    • 创建Inventories Tower,将部署应用的主机信息添加到Hosts,并添加到"app_server" Group Tower

      • 创建Inventory
    Inventories创建
    • 添加应用服务器主机
    添加主机
    • 给Inventory授权给Jenkins用户
    对Inventories授权
    • 创建访问应用主机的身份认证密钥 Tower

      • 添加新的认证信息,可以是用户名+密码,也可以用户名+私钥
    应用服务器登录密钥
    • 对认证信息授权给Jenkins用户
    对认证信息授权给Jenkins用户
    • 创建Job Template Tower
    Job Template

    补充:

    1. EXTRA VARIABLES是额外的补充参数。
    2. 大部分参数都有PROMPT ON LAUNCH选项,这个是在Template Job实际运行时,通过用户交互的方式进行配置
    3. SURVEY的配置有更加友好的方式与用户交互进行配置参数

    Jenkins上的设置

    • 安装Ansible Tower插件 Jenkins
    Jenkins 安装Ansible Tower插件
    • 设置访问Ansible Tower的登录Credentials Jenkins
    添加Ansible Tower用户
    • 在Configure System中设置Ansible Tower信息 Jenkins
    设置Ansible Tower信息
    • 新建Jenkins Job,设置Ansible Tower Job jenkins
    pipeline{
        agent any
        stages{
            statge("构建应用"){
                echo '构建应用'
            }
            statge("Jar包上传"){
                echo 'Jar包上传到Nexus,以供Ansible Tower中的playbook下载部署'
            }
            stage("触发Ansible Tower Job"){
                ansibleTower credential: '2', 
                    extraVars: '''APPNAME: App
        ARTIFACT_URL: http://test.com/app/1.0.jar''', 
                    importTowerLogs: false, 
                    inventory: '2',
                    jobTemplate: '8', 
                    templateType: 'job', 
                    throwExceptionWhenFail: false, 
                    towerServer: 'ansible tower', 
                    verbose: false
            }
        }
    }
    

    通过Jenkins Job的触发就会触发Ansible Tower中id为8的Job Template生成新的Job进行应用部署。

    最后一句话作为总结:
    Ansible Tower与Jenkins双剑合璧才是运维自动化正确的打开方式。

    参考资料

    Take Ansible and Jenkins Integration to the next level: CI/CD with Ansible Tower
    Ansible Tower官方文档

    相关文章

      网友评论

        本文标题:使用Ansible Tower与Jenkins集成实现CI/CD

        本文链接:https://www.haomeiwen.com/subject/uueftctx.html