CICD中的Jenkins和Ansible解决方案

每一次重装系统或者是需要在服务器上正确运行软件,我们都需要重新安装所有的package、dependency并进行相应配置的微调。而这一过程可能就会因为疏忽导致错误,因此需要自动化部署

持续整合,持续交付(CI/CD)的实践,我们能够周期性的对产品进行各种专业测试,如果出现问题我们也能快速找到发生问题的最近位置。同时我们还能进行报表分析和自动通知等其他操作

Ansible

ansible就是这样一款主流的自动化部署工具,要通过ansible在被控节点(managed node)上配置环境,我们需要安装Pyhton然后通过SSH连线。

安装过程

Ansible当中,所有机器分为以下两类:

  • 控制主机(Control Machine): 这类主机能通过Ansible的playbook(剧本)对被控节点进行部署
  • 被控节点(Managed Machine):又称Remote Node,这类节点就是我们通过Ansible进行部署的对象

值得注意的是,Ansible并不用安装在被控主机上,只需要保证能通过SSH与Control Machine沟通就可以了

playbook

我们使用playbook,这一由YAML编写的程序,来告诉Ansible需要做什么。

---
- hosts: server
  tasks:
    # task 1
    - name: test connection
      ping:
      register: message

    # task 2
    - name: print debug message
      debug:
        msg: "{{ message }}"

task1中,调用了ansible内置模块-ping,用于测试控制主机能否与被控节点连线。如果正常,会回传“pong”信息,然后我们能通过register将被控主机回传的消息存贮在message变量中

task2中,利用debug方法将message输出到终端上

如何运行playbook

ansible-playbook playbook.yml

但是这样ansible并不会做任何task,因为ansible应该对hosts指定的server来执行task。但是我们并没有告诉ansible哪一台是server,因此需要一个inventory来让ansible参考,具体编写需要先在ansible的config中指定inventory路径。

但是呢,不同的部署环境(比如test、development、producting)需要不同的配置细节,因此我们就可以定义多个inventory file,然后通过以下指令来实现部署

$ ansible-playbook -i devl-inventory devl-playbook.yml
$ ansible-playbook -i prod-inventory prod-playbook.yml

当然也可以写在同一文件中使用[]标识

[test]
127.0.0.1 ansible_port=2222 ansible_user=test_user

[test:vars]
[email protected]

[devl]
127.0.0.1 ansible_port=2222 ansible_user=devl_user

[devl:vars]
[email protected]

Ansible Role

我们可以通过自定义的role来使playbook重复使用,以此来是一部分部署资源能被重复使用

Ansible会在下列路径寻找可执行roles:

  1. 与playbook同一层额roles文件夹
  2. /etc/ansible/roles

例如

workspace
├── inventory
├── playbook.yml
└── roles
    └── pip
        └── tasks
            └── main.yml

表示pip是第一个role的名称,然后工作流程定义在tasks/main.yml中

playbook中改为以下内容

---
  - hosts: server
    roles:
      - { role: pip, become: yes }

Jenkins

当前安装Jenkins的方法有许多,其中一种比较好的是利用docker来进行。因为容器本身比较轻量,资源远少于启动虚拟机;而且容器之间资源相互隔离,不存在相互污染。

Jenkins Job

Job(任务)是构建持续集成流程的基本单元,Job 可以包括多个构建步骤,例如源码管理、构建、测试和发布等。

Job 的用途主要包括以下几个方面:

  1. 构建持续集成流程:通过 Job,可以将代码拉取、构建、测试和部署等步骤串联起来,从而构建出一个完整的持续集成流程。这样可以实现快速、自动化的构建和部署,提高软件开发的效率和质量。
  2. 自动化测试:Job 中可以包含自动化测试步骤,例如单元测试、集成测试和端到端测试等。自动化测试可以在构建过程中自动运行,从而及早发现代码错误,减少测试成本和时间。
  3. 构建报告和通知:Job 运行后,可以生成各种构建报告,例如测试报告、代码覆盖率报告和构建日志等。同时,Jenkins 还支持各种通知方式在构建失败或成功后通知相关人员。
  4. 构建流水线:多个 Job 可以通过 Jenkins 提供的 Pipeline 功能串联起来,形成一个完整的构建流水线,实现多个 Job 的协同工作
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇

)">
下一篇>>