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


在测试过程中 , 为了保证测试环境的有效性 , 每次部署的基础依赖环境是要干净的 。 但有些基础环境的准备如有些应用服务器或中间件等的安装是比较耗时的 。 为了保证干净的基础依赖环境并尽量简化部署过程的前提下 , 我们利用了虚拟机的快照功能 。 对于一些复杂的依赖环境 , 提前安装好并生成虚拟机快照 , 在部署过程中通过恢复快照的方式来简化部署过程 。
- include_vars: defaults/main.yml - name: manage vm snapshot vmware_guest_snapshot: hostname: ''{{ vsphere_hostname }}'' username: ''{{ vsphere_username }}'' password: ''{{ vsphere_password }}'' datacenter: ''{{ vsphere_datacenter }}'' validate_certs: ''{{ validate_certs }}'' name: ''{{ vm_name }}'' folder: ''{{ vm_folder }}'' state: ''revert'' snapshot_name: ''{{ vm_snapshot_name }}'' delegate_to: localhost register: revertstate3. 清理环境
为了保证产品安装目录未被占用 , 产品监听的端口处于空闲状态 , 需要对目录和端口进行清理操作 。 在执行清理环境过程中 , 对与有停止、卸载脚本的产品 , 调用脚本进行清理;没有停止、卸载服务的使用系统命令进行清理 。 对于不存在的目录进行删除操作时的错误忽略 。
- name: copy killport file when: have_port template: src: killport.sh dest: ''{{ user_dir }}//killport.sh'' mode: 0755 - name: close {{ deploy_type }} application when: have_port shell: bash killport.sh args: chdir: ''{{ user_dir }}/'' ignore_errors: yes - name: close {{ deploy_type }} application when: not have_port shell:bash {{ stopFile }} args: chdir: ''{{ user_dir }}/'' ignore_errors: yes - name: close {{ deploy_type }} application when: not have_port shell:ps -ef |grep ''{{ user_dir }}/{{ deploy_type }}'' |grep -v grep |awk '{print $2}' |xargs kill -9 args: chdir: ''{{ user_dir }}/'' ignore_errors: yes 4. 部署依赖
部署依赖主要进行产品部署前的准备工作 , 包括JDK的安装、tomcat 端口配置等 。 通过参数定义 , 进行指定版本JDK , 应用服务器等依赖的安装 , 并可对不同产品进行自定义配置 。 对于JDK安装、应用服务配置等操作都封装为单独的role以便复用 。
- include_role: name=jdk - when: need_app_server|bool include_role: name=deployappserver5. 部署
部署主要为执行产品部署操作 , 主要进行安装包的获取 , 配置文件的修改、部署等操作 。 在执行过程中根据product_type参数选择对应的产品role , 同一产品不同产品版本在同一role下定义不同的task执行不同的操作 。
- include_role: name=setfactor - when: revert_state|bool include_role: name=revertsnapshot - include_role: name=cleanenv - include_role: name=getpackage - include_role: name=jdk - when: need_app_server|bool include_role: name=deployappserver - include_role: name={{ product_type }} - when: start_server|bool include_role: name=startserver具体的部署过程根据product_type定义不同的操作 , 其中一个产品部署操作如下所示:
- include_vars: ''common_vars.yml'' - include_vars: ''{{product_module|lower}}.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_item - name: update ''install.sh'' lineinfile: dest: ''{{ user_dir }}/install.sh'' regexp: ''{{ item.line }}'' line: ''{{ item.insertafter }}'' with_items: - { line: ''^export P_I_JAVA_HOME='', insertafter: ''export P_I_JAVA_HOME={{ local_java_home }}'' } - name: install product shell: ./install.sh args: chdir: ''{{ user_dir }}/'' - name: wait install success wait_for: path: ''{{ user_dir }}/logs/install.log'' search_regex: ''esb.* installed successfully'' timeout: 606. 启动


推荐阅读