流程
1.CI(持续集成)
在代码POM文件实现,通过maven打包镜像
命令如下:
mvn clean compile jib:build
2. CD(持续部署)
通过ansible的playbook功能实现(目录/etc/ansible)
目录结构:
tree-ansible
ansible ├── ansible.cfg ├── hosts //ansible可访问的服务器 ├── roles │ ├── xxx-server //项目roles规则 │ │ └── tasks │ │ └── main.yml └── site.yml //项目tasks列表 |
---|
项目site.yml如下:
site.yml
- name: deploy proxy hosts: all gather_facts: false roles: - {role: bsd-operation, tags: “xxx-server1”} - {role: bsd-shoppingcart-sync, tags: “xxx-server2”} |
---|
项目yml文件如下(单个项目):
main.yml
- pip: name: docker-py state: present - name: Login registry docker_login: registry: registry.cn-hangzhou.aliyuncs.com username: xxxx password: xxxx reauthorize: yes - name: Pull image docker_image: name: registry.cn-hangzhou.aliyuncs.com/xxx state: present force: yes - name: Restart container docker_container: name: “{{ name }}” image: registry.cn-hangzhou.aliyuncs.com/xxx network_mode: host volumes: - /data/logs:/store/logs log_driver: json-file log_options: max-size: “10M” max-file: “10” recreate: yes restart_policy: always state: started force_kill: true command: ‘profile=”{{ profile }}” port=”{{ port }}”‘ env: ENV=”{{ env }}” - name: Clean image shell: docker image prune -f |
---|
3.Jenkins部署
shell
IP=10.21.73.29 Port=9596 Env=test Name=xxx mvn clean compile jib:build -Djib.container.jvmFlags=-Xms2048m,-Xmx2048m ansible-playbook /etc/ansible/site.yml -l ${IP} -t ${Name} -e name=${Name} -e port=${Port} -e profile=${Env} -e env=${Env} |
---|
-l:远程服务器
-t:ansible任务名称
-e: name容器名称
-e prot端口
-e profile配置环境(apollo)
-e env应用环境(dev,test,prod)
规范
名称规范
ansible的roles和tasks,和容器的名称,和镜像名称保持一致(pom文件定义),开发人员在定义项目名称的时候一定要规范
端口规范
目录规范
日志路径,/store/logs/项目名称(/store挂载到nfs)
写评论…