一、jenkins结合ansible完成自动交付
- 我们的目的是完成一个
参数化构建
过程,利用ansible自动部署工具,与jenkins匹配,最终完成参数化构建过程
在jenkins服务器上安装ansible,部署好jenkins用户到目标主机的ssh免密
gitlab仓库新建项目playbook
在server1上克隆项目到本地仓库并编辑ansible相关部署文件
[root@server1 playbook]# tree .
.
├── ansible.cfg
├── httpd.conf.j2
├── inventory
│ ├── prod
│ └── test
├── playbook.yml
└── README.md
[root@server1 playbook]# cat ansible.cfg
[defaults]
command_warnings=False
remote_user=devops
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[root@server1 playbook]# cat playbook.yml
---
- hosts: all
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: config apache
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache
- name: enable apache
service:
name: httpd
state: started
enabled: yes
- name: create index.html
lineinfile:
path: /var/www/html/index.html
create: yes
line: "{{ ansible_hostname }}"
handlers:
- name: restart apache
service:
name: httpd
state: restarted
[root@server1 playbook]# cd inventory/
[root@server1 inventory]# pwd %inventory目录中存放的是主机对象
/root/playbook/inventory
[root@server1 inventory]# cat prod
[prod]
172.25.0.3 http_port=80
[root@server1 inventory]# cat test
[test]
172.25.0.1 http_port=8000
[root@server1 playbook]# vim httpd.conf.j2
Listen {{ http_port }} %将端口定义为变量的形式
server3上安装httpd,并将/etc/httpd/conf/httpd.conf文件复制到server1的playbook目录下
在jenkins中新建项目,设置手动参数式触发,prod为生产环境主机,test为测试主机
切到项目的工作区然后选择inventory下的对象主机推送ansible任务
server1为test主机(测试环境),做相关配置
将所有更改提交并push到远程gitlab仓库
参数化构建测试
选择test主机进行部署测试,查看部署是否成功
添加apache测试页并重新测试
- 选择prod主机(生产环境)进行构建测试
二、搭建harbor仓库,结合jenkins完成从harbor仓库拉取镜像启动容器
安装配置harbor仓库
测试:上传镜像至harbor仓库
更改test项目配置,设置从harbor仓库中拉取镜像
禁用docker项目
测试test项目,看能否自动将构建好的镜像上传到harbor仓库
配置server3(habor仓库)的相关参数,更改其默认拉取镜像的路径并作测试
更改docker项目配置,使之能够从harbor仓库拉取镜像并启动容器
测试是否在目的环境启动相关容器