jenkins构建jar包为镜像并上传到docker仓库

简介: jenkins构建jar包为镜像并上传到docker仓库

01 引言

本文是一篇笔记,主要记录如下内容:

  • jenkins如何把maven项目构建为jar
  • jenkins然后把jar包构建为docker镜像
  • jenkins如何把docker镜像上传到仓库

下面来讲解一下相关的jenkins脚本。

02 jenkins打包maven项目

jenkins打包maven项目,其实就是在jenkins服务里面安装maven,然后使用maven命令来打包,命令如下:

mvn clean package -DeskipTests

03 jenkins构建jar包为镜像

3.1 确认编译系统状态

step1: 首先要确认编译系统的状态,命令如下:

docker buildx ls |grep builder0 | grep running || docker buildx inspect --bootstrap

3.2 清理构建缓存

然后清理docker构建缓存,命令如下:

docker buildx prune -a -f && docker builder prune -a -f;

3.3 构造Dockerfile

3.3.1 新建或下载Dockerfile模板

下载Dockerfile模板并输出到当前文件夹,文件名为:Dockerfile:

curl https://外网地址/Dockerfile.txt > Dockerfile

当然这里的Dockerfile模板是从服务器下载的,也可以放到jenkins服务器里面的一个目录,直接复制过来就可以了。

Dockerfile模板里面的内容为:

FROM ccr.ccs.tencentyun.com/xxx-base-img/jdk:11.0.11p9-20210917
ENV APP_VERSION __APP___VERSION__
WORKDIR /app
ADD https://xxx.cn/logback-spring.xml /app/
ADD https://xxx.cn/apm-agent.jar /app/
ADD https://xxx.cn/pre_exec.sh /app/
COPY __APP___JAR___PATH__ /app/
CMD mkdir -p /app/logs; \
if [ -d pre-exec-shells ];then for n in `ls pre-exec-shells/`;do bash pre-exec-shells/$n;done;fi;\
bash pre_exec.sh;\
mkdir -p /app/logs/${APP_VERSION}-${HOSTNAME}/heap_dump ;\
mkdir -p /app/logs/${APP_VERSION}-${HOSTNAME}/gc ;\
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -server \
-Xmx${MEM_SIZE:-512}m -Xms16m \
-XX:MetaspaceSize=32m \
-XX:MaxMetaspaceSize=256m \
-XX:OnOutOfMemoryError="kill -9 %p" \
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/app/logs/${APP_VERSION}-${HOSTNAME}/heap_dump/java_heapdump.hprof \
${EXT_JVM_CMD} \
-Dfile.encoding=UTF-8 \
-Xlog:gc*:file=/app/logs/${APP_VERSION}-${HOSTNAME}/gc/gc.log:time,tags:filecount=10,filesize=102400 \
${EXT_APM_CMD} \
-jar __APP___JAR___FILENAME__ \
--logging.file=/app/logs/${APP_VERSION}-${HOSTNAME}/ \
--spring.profiles.active=${SPRING_ACTIVE_PROFILE:-dev} \
--swagger.enable=false \
--logging.config=./logback-spring.xml \
${EXT_APP_CMD}

3.3.2 定义变量名

定义此变量为镜像的命名空间:

img_tag_name=项目/子项目名

定义此变量到对应jar包的相对地址,注意特殊符号要转义:

jar_path=项目\\\/target\\\/xxx.jar

定义此变量为对应jar包的文件名,注意要和jar_path对应的文件名一致

jar_name=xxx.jar

3.3.3 为Dockerfile变量赋值

ver_str=${Version}_`date "+%Y%m%d-%H%M%S"`
sed -i "s/__APP___VERSION__/$ver_str/" Dockerfile
sed -i "s/__APP___JAR___PATH__/$jar_path/" Dockerfile
sed -i "s/__APP___JAR___FILENAME__/$jar_name/" Dockerfile

3.4 打包镜像

打包脚本:

docker buildx prune -a -f && docker builder prune -a -f

4. 推送镜像到仓库

docker buildx build --platform linux/arm64,linux/amd64 --tag ccr.ccs.tencentyun.com/$img_tag_name:$ver_str --push . 
docker buildx prune -a -f && docker builder prune -a -f

5. Docker远程主机如何运行镜像

可以参考《Docker部署jar包运行》

目录
相关文章
|
15天前
|
负载均衡 网络协议 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基本概念和类型,包括桥接网络、宿主网络、覆盖网络和 Macvlan 网络等,并提供了创建、管理和配置自定义网络的实用命令。通过掌握这些知识,开发者可以构建更健壮和灵活的容器化应用,提高应用的可扩展性和安全性。
|
1月前
|
Kubernetes Java Docker
利用(K8S)配合Docker部署jar包
通过Docker打包并部署到Kubernetes(K8S)集群的过程。首先,通过SpringBoot生成jar包,接着在K8S环境中创建并编辑Dockerfile文件。随后构建Docker镜像,并将其推送到镜像仓库。最后,通过一系列kubectl命令(如get pods、get svc、logs等),展示了如何在K8S中管理应用,包括查看Pod状态、服务信息、Pod日志以及重启Pod等操作。
101 2
|
19天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
21天前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
4天前
|
网络协议 安全 开发者
掌握 Docker 网络:构建复杂的容器通信
在 Docker 容器化环境中,容器间的通信至关重要。本文详细介绍了 Docker 网络的基础知识,包括网络驱动、端口映射和命名等核心概念,并深入探讨了 Bridge、Host、Overlay 和 Macvlan 四种网络类型的特点及应用场景。此外,还提供了创建、连接、查看和删除自定义网络的命令示例,以及高级网络配置方法,如网络命名空间、DNS 解析和安全通信配置,帮助开发者构建更健壮的容器化应用。
|
2月前
|
前端开发 应用服务中间件 nginx
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
[译] 面向 React 和 Nginx 的 Docker 多阶段构建
|
2月前
|
存储 Docker 容器
阿里云私有docker仓库构建海外镜像
【8月更文挑战第25天】
135 3
|
2月前
|
缓存 运维 安全
在Docker中,构建镜像应该遵循哪些原则?
在Docker中,构建镜像应该遵循哪些原则?
|
2月前
|
Prometheus 监控 Cloud Native
使用 Jenkins 监控和优化构建性能
【8月更文第31天】在软件开发的过程中,构建性能直接影响着开发效率和团队的生产力。一个快速、可靠的构建流程可以显著加快迭代速度,减少等待时间,使团队能够更快地响应变化。Jenkins 作为一款广泛使用的持续集成/持续交付(CI/CD)工具,提供了丰富的功能来帮助开发者监控和优化构建性能。本文将探讨如何利用 Jenkins 的内置工具和外部工具来监控构建性能,并提出一些具体的优化方案。
99 0

热门文章

最新文章

下一篇
无影云桌面