每一次重装系统或者是需要在服务器上正确运行软件,我们都需要重新安装所有的package、dependency并进行相应配置的微调。而这一过程可能就会因为疏忽导致错误,因此需要自动化部署
持续整合,持续交付(CI/CD)的实践,我们能够周期性的对产品进行各种专业测试,如果出现问题我们也能快速找到发生问题的最近位置。同时我们还能进行报表分析和自动通知等其他操作
ansible就是这样一款主流的自动化部署工具,要通过ansible在被控节点(managed node)上配置环境,我们需要安装Pyhton然后通过SSH连线。
Ansible当中,所有机器分为以下两类:
值得注意的是,Ansible并不用安装在被控主机上,只需要保证能通过SSH与Control Machine沟通就可以了
我们使用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输出到终端上
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_receivers=test@gmail.com
[devl]
127.0.0.1 ansible_port=2222 ansible_user=devl_user
[devl:vars]
email_receivers=devl@gmail.com
我们可以通过自定义的role来使playbook重复使用,以此来是一部分部署资源能被重复使用
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的方法有许多,其中一种比较好的是利用docker来进行。因为容器本身比较轻量,资源远少于启动虚拟机;而且容器之间资源相互隔离,不存在相互污染。
Job(任务)是构建持续集成流程的基本单元,Job 可以包括多个构建步骤,例如源码管理、构建、测试和发布等。
Job 的用途主要包括以下几个方面: