自动化集成:Pipeline整合Docker容器
2023-09-11 14:14:36 时间
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译、打包、镜像构建、部署等操作;本篇文章主要描述流水线集成Docker用法。
一、背景描述
微服务架构是当前主流的技术选型,在业务具体落地时,会存在很多业务服务,不管是在开发、测试、上线的任意节点中,如果基于手动编译的方式打包服务,操作成本不仅极高,而且很容易出现纰漏。
通过Pipeline流水线的方式,将服务镜像构建编排成一键触发执行,实现自动化的管理流程,是微服务架构中的必要的功能模块。
二、流程设计
本篇中的流程节点,主要针对打包好的应用Jar
包,在docker模块中的处理流程,主要是镜像构建管理与容器运行:
- 构建docker文件目录与内容;
- 拷贝
Jar
包,创建Dockerfile
脚本文件; - 执行docker镜像构建,推送云仓库;
- 拉取镜像文件并运行docker容器;
整个流程的都放在Pipeline流水线中,衔接在本地Jar包生成之后。
三、实现过程
1、插件安装
首先安装流程中Docker集成的相关插件:Docker Pipeline
,Docker plugin
,CloudBees Docker Hub/Registry Notification
。
在之前的流水线篇幅中,已经通过流水线完成Gitee仓库代码pull和本地打包,下面开始处理docker环节。
2、镜像构建脚本
关于Dockerfile的脚本语法也可以参考之前docker篇幅,下面看流水线中的用法:
environment {
docker_directory = 'docker-app'
docker_repository = '仓库URL'
}
stage('Dockerfile') {
steps {
sh '''
rm -rf ${docker_directory}
mkdir -p ${docker_directory}
cp auto-client/target/auto-client-1.0-SNAPSHOT.jar ${docker_directory}/auto-client.jar
cd ${docker_directory}
cat>Dockerfile<<EOF
FROM java:8
MAINTAINER cicadasmile
VOLUME /data/docker/logs
ADD auto-client.jar application.jar
ENTRYPOINT ["java","-Dspring.profiles.active=dev","-Djava.security.egd=file:/dev/./urandom","-jar","/application.jar"]
EOF
cat Dockerfile
'''
echo "create Dockerfile success"
}
}
脚本说明:
- 在流水线的工作空间创建目录
docker-app
; - 每次执行都清空一次docker目录,再把Jar包和Docker脚本放进去;
- cat-EOF-EOF:即创建Dockerfile文件,并把中间的内容写入;
- 脚本中的内容必须在文件中顶行写入;
3、打包推送
这里即进入docker目录,执行镜像打包的操作,并把镜像推送到云端仓库,很多仓库都是私有的,需要身份验证,通过配置凭据去访问:
stage('DockerImage'){
steps {
script {
dir("${docker_directory}") {
sh 'ls'
docker.withRegistry("${docker_directory}", '访问凭据') {
docker.build("doc-line-app:latest").push()
}
}
echo "build DockerImage success"
}
}
}
4、凭据配置
打开Manage Jenkins
界面,Manage Credentials
选项;
按如下流程配置即可:
同系列推荐:
四、源代码地址
GitEE·地址
https://gitee.com/cicadasmile/butte-auto-parent
Wiki·地址
https://gitee.com/cicadasmile/butte-java-note
相关文章
- Docker拷贝宿主机与容器中的文件
- MongoDB在Docker中安装以及设置远程连接
- docker探索-CentOS7中配置Docker的yum源并升级安装docker1.13(十)
- docker命令(随时补充)
- docker迁移与备份
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
- Docker - docker in docker(dind)
- [Docker] Container & image (docker run)
- Docker - 构建镜像:使用docker build命令和Dockerfile文件
- Docker 鸟瞰docker生态系统
- 启动docker容器时报错:iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT -
- docker 每次都得source /etc/profile以及如何查看Docker容器环境变量、向容器传递环境变量
- Docker入门与应用系列(一)介绍和部署
- 004-docker命令-docker资源配置-Docker容器CPU、memory资源限制
- 【云原生 | 35】Docker快速部署主流解释型语言Python
- 81.第十七章 企业级容器技术docker -- Docker 数据管理、Docker网络管理(九)
- 79.第十七章 企业级容器技术docker -- Docker 镜像制作和管理、Docker 数据管理(七)
- 78.第十七章 企业级容器技术docker -- Docker 镜像制作和管理(六)
- Harbor - 企业级Docker私有仓库
- 【云原生之Docker实战】使用docker部署Notepad个人记事本工具
- 【云原生之Docker实战】部署docker管理平台shipyard
- 【云原生之Docker实战】使用docker部署o2oa企业OA平台
- 【云原生之Docker实战】使用docker部署Wiznote私人笔记系统
- docker velocyto.r
- Docker学习笔记18:docker实例之redis 集群搭建
- Docker学习笔记07:docker使用之容器使用
- 推送docker镜像至Docker Hub