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包运行》

目录
相关文章
|
1天前
|
消息中间件 Kafka 流计算
docker环境安装kafka/Flink/clickhouse镜像
通过上述步骤和示例,您可以系统地了解如何使用Docker Compose安装和配置Kafka、Flink和ClickHouse,并进行基本的验证操作。希望这些内容对您的学习和工作有所帮助。
41 28
|
1月前
|
Ubuntu NoSQL 开发工具
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
《docker基础篇:4.Docker镜像》包括是什么、分层的镜像、UnionFS(联合文件系统)、docker镜像的加载原理、为什么docker镜像要采用这种分层结构呢、docker镜像commit
208 70
|
14天前
|
网络协议 Linux 网络安全
docker centos镜像 npm安装包时报错“npm ERR! code ECONNRESET”
通过上述步骤,您可以有效解决在 Docker 中使用 CentOS 镜像安装 npm 包时遇到的 "npm ERR! code ECONNRESET" 错误。希望这些方法能帮助您顺利进行 npm 包的安装。
90 26
|
1月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用
85 27
|
1月前
|
安全 数据安全/隐私保护 Docker
docker私有仓库harbor安装
通过以上步骤,您可以成功在企业内部安装和配置Harbor私有仓库,方便地管理和分发Docker镜像。Harbor不仅提供了基础的镜像管理功能,还增强了安全性、身份管理和审计功能,使其成为企业级容器镜像管理的理想选择。
98 22
|
1月前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
158 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
1月前
|
存储 Docker 容器
Docker-基础(数据卷、自定义镜像、Compose)
通过数据卷实现持久化存储,通过自定义镜像满足特定需求,通过Docker Compose方便地管理多容器应用。掌握这些Docker基础概念和操作,可以显著提高开发和部署效率,确保应用程序的可移植性和可扩展性。
74 22
|
1月前
|
Ubuntu NoSQL 关系型数据库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
《docker基础篇:6.本地镜像发布到私有库》包括本地镜像发布到私有库流程、docker regisry是什么、将本地镜像推送到私有库
126 29
|
7月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
643 2
[JarEditor]可直接修改jar包的IDEA插件
|
7月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。