每一次重装系统或者是需要在服务器上正确运行软件,我们都需要重新安装所有的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: servertasks:# task 1- name: test connectionping:register: message# task 2- name: print debug messagedebug: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_receivers=test@gmail.com[devl]127.0.0.1 ansible_port=2222 ansible_user=devl_user[devl:vars]email_receivers=devl@gmail.com
Ansible Role
我们可以通过自定义的role来使playbook重复使用,以此来是一部分部署资源能被重复使用
Ansible会在下列路径寻找可执行roles:
- 与playbook同一层额roles文件夹
- /etc/ansible/roles
例如
workspace├── inventory├── playbook.yml└── roles└── pip└── tasks└── main.yml
表示pip是第一个role的名称,然后工作流程定义在tasks/main.yml中
playbook中改为以下内容
---- hosts: serverroles:- { role: pip, become: yes }
Jenkins
当前安装Jenkins的方法有许多,其中一种比较好的是利用docker来进行。因为容器本身比较轻量,资源远少于启动虚拟机;而且容器之间资源相互隔离,不存在相互污染。
Jenkins Job
Job(任务)是构建持续集成流程的基本单元,Job 可以包括多个构建步骤,例如源码管理、构建、测试和发布等。
Job 的用途主要包括以下几个方面:
- 构建持续集成流程:通过 Job,可以将代码拉取、构建、测试和部署等步骤串联起来,从而构建出一个完整的持续集成流程。这样可以实现快速、自动化的构建和部署,提高软件开发的效率和质量。
- 自动化测试:Job 中可以包含自动化测试步骤,例如单元测试、集成测试和端到端测试等。自动化测试可以在构建过程中自动运行,从而及早发现代码错误,减少测试成本和时间。
- 构建报告和通知:Job 运行后,可以生成各种构建报告,例如测试报告、代码覆盖率报告和构建日志等。同时,Jenkins 还支持各种通知方式在构建失败或成功后通知相关人员。
- 构建流水线:多个 Job 可以通过 Jenkins 提供的 Pipeline 功能串联起来,形成一个完整的构建流水线,实现多个 Job 的协同工作