环境准备
Docker 注册中心安装及配置
1. 安装 Artifactory
IP: 192.168.0.100, 安装后服务监听 8081端口
wget https://bintray.com/jfrog/artifactory-pro-rpms/rpm -O bintray-jfrog-artifactory-pro-rpms.repo
sudo mv bintray-jfrog-artifactory-pro-rpms.repo /etc/yum.repos.d/
yum install jfrog-artifactory-pro
2.生成反向代理配置, 映射 Artifactory 注册中心
登陆 Artifatory , 进入 Admin->Reverse Proxy, 通过 UI 生成注册中心反向代理配置, 如下图:
推荐使用 Sub Domain 方式。
3.在 Artifactory 同一台机器安装 Nginx
yum install nginx
touch /etc/nginx/conf.d/artifactory.conf
将上一步骤生成的配置添加到 artifactory.conf 文件中。代理配置将子域名或指定端口服务映射到 Artifactory Docker 仓库,这样我们可以基于一个 Aritfacotry 实例创建多个 Docker 注册中心,分仓库存储管理 Docker 镜像,如下图:
4.创建 Docker 仓库
-
创建 Docker 类型仓库:docker-dev-local2, docker-release-local2
-
创建 Maven 类型仓库:libs-snapshot-local, libs-release-local
Jenkins 安装及配置
1.安装 Jenkins
IP: 192.168.0.101, 指定 Jenkins 服务端口 9080 (可以自定义)
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.60.1/jenkins.war -O jenkins.war
nohup java -jar jenkins.war –httpPort=9080 >/dev/null 2>&1 &
2.安装相关插件
3.配置 Jenkins 系统配置
配置 Artifactory Server, 并开启 Enable Build Info proxy for Docker images,proxy 的作用是帮助我们收集并记录构建时的依赖以及发布构建等信息,其中 Proxy 端口设置为 8092(可以自定义),会在后面的步骤使用到。
4.在 Jenkins 所在机器安装 Docker
注意:Jenkins Master以及所有 Agent 上都需要安装 Docker
sudo yum install -y yum-utils
sudo yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install docker-ce
5.配置Docker Client Proxy
mkdir -p /etc/systemd/system/docker.service.d
cat << EOF > /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment=”HTTP_PROXY=http://192.168.0.101:8092/”
EOF
systemctl daemon-reload
systemctl restart docker
其中 proxy 的 ip:port 为第 3 步Jenkins 上配置的 build info proxy
Ansible 安装配置
1.Jenkins 节点安装 Ansible, IP:192.168.0.101
rpm -iUvh http://dl.Fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
yum install ansible
2.添加受管理节点,用于发布业务应用
主节点生成密钥对,并发布到 App 节点
ssh-keygen -t rsa
ssh-copy-id -i root@192.168.0.102
App 运行节点 IP:192.168.0.102
Jenkins Pipeline
创建 Jenkins Pipeline Job
1.创建 Pipeline 类型 Job
Job Name 命名为docker-app-pipeline
2.配置 docker-app-pipeline job
-
Fork Git repository:
https://gitlab.com/yongqiang/docker-lifecycle-scripts/
-
配置 JenkinsFile 对应 Git 仓库
-
配置 JenkinsFIle 所在目录
Pipeline 关键源码分析
1.业务 App 项目构建
基于Artifactory Plugin 提供的 DSL 进行项目构建,将构建的 war 包发布到 libs-snapshot-local 仓库,支持 Maven,Gradle
2.下载最新构建的 App war 包
基于Artifactory Latest Version API 查找项目构建的最新版本号,并下载对应 war 包到 workspace
3.将 war 包打包到 docker-app 镜像中
基于最新稳定版 docker-framework 镜像构建
4.测试 docker-app 镜像
5.升级 war 包以及 docker-app 到 Release 仓库
基于 Artifactory 的 promote api,从 Dev 仓库升级到 Release 仓库,并将最新 docker-app:$buildId 镜像 tag 为 latest 标签,方便对外提供服务
6.发布最新镜像到 App 服务器
App 服务器 IP:192.168.0.3
7.添加 Git Webhook
提交代码到 Git 仓库,自动触发 docker-app-pipeline Job,经构建,测试,快速发布到测试或生产环境,大大提高 CI/CD 持续交付速度
运行效果
1.构建过程视图,可以清晰看到构建过程以及每一步运行耗时
2.App 运行浏览
3.构建过程中,Artifactory Plugin 收集构建信息,可以记录本次构建发布的模块及其依赖信息,绑定镜像版本与业务 App 版本的关系,更加透明
总结
今天我们实践了上一期的话题,解决传统流水线的一些隐患,基于 Jenkins,Artifactory,Docker 以及 Ansible 实现了自动化 Docker 流水线。理论上不需要任何人工操作,就可以快速将业务 App 快速发布到生产环境,帮助我们快速稳定的将代码转化为商业价值。
原文链接:https://blog.51cto.com/u_15127508/2656839