前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 之 Jenkins自动化部署

Docker 之 Jenkins自动化部署

作者头像
架构探险之道
发布2019-07-25 15:41:55
2.5K0
发布2019-07-25 15:41:55
举报
文章被收录于专栏:架构探险之道架构探险之道

Docker搭建微服务自动部署 <架构探险之路>,让我们来看看如何实现基于Docker的Jenkins自动化部署。

Docker 之 Jenkins自动化部署

构建思路

  • Docker 安装jenkins,用来拉取代码自动更新
  • Docker 安装gitlab,用来局域网或本地管理代码
  • Docker 安装本地镜像仓库registry、docker-register-web
  • Spring Boot 开发代码后编写Dokcerfile文件
  • Spring Boot 利用docker的mvn插件测试镜像的生成和推送
  • 测试镜像运行

镜像的自动构建分两种情况:

jenkins所在容器中已部署docker服务

直接在构建中利用shell脚本完成Dokcerfile文件的复制和执行,进而在jenkins所在容器内完成镜像的构建

jenkins所在容器中未部署docker服务

- jenkins中利用Docker插件实现镜像构建
- jenkins 全局工具配置中安装docker[自动安装]
- 将jenkins部署在宿主机上,重复上述关联步骤。gitlab可切换为github、gitee

为了提升镜像的自动构建速度,最终采用本地部署jenkins的方式,因为宿主机是有docker运行环境的。

Jenkins部署

jenkins环境 [相对版本较低]

docker pull jenkinsdocker run -d -p 8002:8080 -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always jenkins查看容器日志docker logs -f jenkins查看容器运行docker ps
界面访问`127.0.0.1:8080`,自动跳转至登录界面
观察日志获取初始密码
jenkins安装
访问
admin:jenkins

jenkinsci/jenkins [最新版本]

  • 镜像 docker pull jenkinsci/jenkins
  • 启动 docker run -d -p 8002:8080 -m 1024m -v ~/jenkins:/var/jenkins_home —name jenkins —restart=always jenkinsci/jenkins
  • 日志 docker logs -f jenkins
  • jenkis 绑定gitlab docker run -d -p 8002:8080 -m 1024m -v ~/jenkins:/var/jenkins_home —name jenkins —restart=always —link gitlab:gitlab.yiyuery.com jenkinsci/jenkins
  • maven构建项目 gitlab’s project 配置

此处ssh鉴权失败需要生成key添加到gitlab中,和github一样,例外,不能使用ssh,只能用http 点击Add,输入账户root,密码Abc23++,此为gitlab管理员账号和访问gitlab时设置的密码 构建后的maven命令配置

下方的为构建后的需要存档的文件配置 [Ant风格] pom.xml文件对应工程目录msa-api-hello/pom.xml 构建结果

本地映射jenkins工作空间

> 定时构建

表示每10分钟执行一次,用H不用*,是为了降低同一时间执行多个构建所带来的性能开销,使用H可以将具体的构建时间进行Hash

  • shell脚本自动化构建Docker镜像 可用环境变量
# 定义变量
API_NAME="msa-api-hello"
API_VERSION="0.0.1"
API_PORT="8101"
IMAGE_NAME="127.0.0.1:5000/com.msa/$API_NAME:$BUILD_NUMBER"
CONTAINER_NAME=$API_NAME-$API_VERSION# 进入target目录并复制Dockerfile文件
cd $WORKSPACE/target
cp classes/Dockerfile .# 构建Docker镜像
docker build -t $IMAGE_NAME .# 推送Docker镜像
docker push $IMAGE_NAME# 删除Docker容器
cid=$(docker ps | grep $CONTAINER_NAME |awk '{print $1}')
if [ x"$cid" != x ]
   then
      docker rm -f $cid
fi# 启动Docker容器
docker run -d -p $API_PORT:8080 --name $CONTAINER_NAME $IMAGE_NAME# 删除Dockerfile文件
rm -f Dockerfile

提升maven构建速度

maven clean install -Dmaven.test.skip=true 跨过测试类的执行

jenkins 无法通过shell脚本进行docker镜像的构建

解决方案:

- 不使用任何Jenkins镜像,宿主机安装Jenkins [宿主机有Docker服务]
- 不使用官方Jenkins镜像,自己构造带有Docker服务的Jenkins镜像
- Docker-in-Docker [DinD]
- Docker-outside-of-Docker [DooD]
- 使用Jenkins的Docker插件

自动构建并发布

考虑到本地笔记本开发环境,多个dokcer的运行效率本来就低,因此,为提高构建速度,下载war包后在本地tomcat中运行,需要对jenkins进行构建的话,启动tomcat即可。

tomcat 部署项目

直接放在tomcat的webapp目录下后在bin目录下直接启动也是可以的。此处主要是因为idea中开发演示项目,直接放在一起,方便管理。

安装maven插件

不安装插件则无法构建maven项目,jenkins默认是不支持maven的

配置后拉取项目代码进行构建

tag使用的是构建次数作为版本标记

自动发布

  • 仓库
  • 运行

备注:

  • 初次构建速度比较慢,后面由于镜像缓存、maven依赖的下载完成,构件速度会变快很多。
  • shell脚本遇到问题请自行学习相关知识
  • 轻量级微服务的自动化发布平台,主要实现思路:Jenkins从GitLab中获取源码,构建后生成docker镜像,以Docker容器的方式进行发布,此外,我还将生成的Docker镜像推送到本地的Docker Registry,以供生产环境使用。如此,我们交付的不再是源码,而是Docker镜像,这种方式更加简单高效。

REFRENCES

  1. Jenkins Wiki
  2. Jenkins 安装教程
  3. Jenkins 利用maven、git管理项目
  4. Jenkins与Docker相关的Plugin使用
  5. 宿主机安装jenkins方案
  6. Shell菜鸟教程
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构探险之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker 之 Jenkins自动化部署
    • Jenkins部署
      • 自动构建并发布
        • REFRENCES
        相关产品与服务
        容器镜像服务
        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档