基于Ansible和Devops的一键测试环境部署实践( 二 )


- name: set driver version when: db_version|string == '5.7' set_fact: db_driver_name: mysql-connector-java-5.1.32.jar db_platform: ''org.hibernate.dialect.MySQLDialect'' - name: Set ipv4 db_url and driver name when: use_net4|bool set_fact: db_url: ''jdbc:mysql://{{ db_ip }}:{{ db_port }}/{{ db_name }}'' db_driver: ''com.mysql.jdbc.Driver''2. with_items
with_items模块用来执行循环 , 可与include_vars配合完成配置文件修改等操作 。
- include_vars: ''common_vars.yml'' - name: modify install.properties lineinfile: path: ''{{ user_dir }}/config/install.properties'' regexp: ''{{ re_item.original }}'' line: ''{{ re_item.replace }}'' with_items: ''{{ deploy_var }}'' loop_control: loop_var: re_item3. include_tasksinclude_role:
include_tasksinclude_role模块主要用来引用其他task或role文件 , 实现功能复用和动态加载 。 在实际部署中可将不同类型的关联操作定义在相同的task或role中 , 执行中根据参数动态加载 , 如windows和linux下模块定义不一样 , 将windows和linux下的操作定义在不同的task中 , 根据执行时传入的os_type去执行不同的操作 。
- include_tasks: ''common/{{os_type}}/main.yml'' - include_tasks: ''dbinfo/set-{{db_type|lower}}.yml'' - include_role: ''name={{product_type}}''4. template
template模块主要将本地文件推送到远端 , 并将文件中的变量定义替换为运行时变量值 , 实现可变的配置 。 在实际部署中可以通过template修改tomcat的默认监听端口
- name: create dir file: state: directory dest: ''{{ app_server_home }}/conf'' - name: change tomcat server port template: src: ''tomcat/server-{{ app_server_version }}.xml'' dest: ''{{ app_server_home }}/conf/server.xml''5. wait_for
wait_for模块主要用来判断端口监听、文件内容等条件是否满足条件 。 在实际部署中可以通过端口去判断服务是否启动 , 或者通过文件中是否包含指定内容去判断是否继续下一步操作 。
- name: wait server start when: have_app_server_port wait_for: state: started port: ''{{app_server_port}}'' timeout: 60 - name: wait install success wait_for: path: ''{{ user_dir }}/logs/install.log'' search_regex: ''esb.* installed successfully''有了ansible丰富的模块支持 , 合理的对部署过程进行设计 , 就可以实现多种产品多组合环境的部署 。 为了尽可能的减少后期脚本维护、新产品支持带来的工作量 , 增加脚本的复用性 , 我们将产品的部署过程分为了以下几个步骤
基于Ansible和Devops的一键测试环境部署实践
本文插图
1. 设置参数
为了保证整个部署脚本的扩展性和对不同产品、不同版本的支持 , 在部署过程中会有很多值需要参数化 。 部署过程中用到的很多参数 , 有些是不易理解和记忆的 , 如jdbc url、drive class等 , 每次执行脚本的时候需要再去查;还有一些参数对某个产品某个版本是固定的 , 可以根据一两个值确定下来 。 设置参数这一步主要是为了解决这个问题 , 预定义好部署过程中的诸多参数 , 通过参数控制部署流程和操作 。
- include_vars: ''vars/{{os_type}}/main.yml'' - include_vars: ''vars/{{ product_type }}/main.yml'' - when: install_var_file == '' include_vars: ''vars/{{ product_type }}/var-{{ product_version| string|lower }}.yml'' - when: install_var_file != '' include_vars: ''{{ install_var_file }}'' - include_tasks: ./common/silentinstall.yml - include_tasks: ''{{ product_type }}/setfactor.yml'' - include_tasks: ''dbinfo/set-{{ db_type | lower }}.yml'' - include_tasks: ''dbinfo/set-url.yml''2. 虚拟机设置


推荐阅读