流水线用到的Dockerfile和构建脚本build.sh

接着 上一篇文章调用的脚本

流水线通用脚本-shell形式,直接改几个参数,可以拿到Jenkins,github和 gitee和 gitlab等直接调用(主要是Jenkins,改的参数比较少)-CSDN博客

上一篇进榜了嘻嘻

root@jenkins dev-build\]# cat Dockerfile ###Dockerfile(多阶段构建) ##注意合并指令减少层数 #运行时环境(轻量级使用最小镜像) ##docker.io/library/alpine:latest ##Alpine是一个轻量级的Linux发行版只需要约5MB ##使用国内镜像站下载 #docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/alpine:latest #crictl images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/alpine:latest ###jdk17镜像 #### 设置环境变量(单层) ##471.47MB #docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17.0.2-jdk #crictl images swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17.0.2-jdk ##17-jdk-alpine 325.60MB #docker pull #crictl images #swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17-jdk-alpine #docker pull ##crictl images #openjdk:17-jre-slim比 JDK 镜像体积小 60% 以上 #我那个openjdk:17-jre-slim有漏洞这个废弃 #FROM openjdk:17-jdk-slim ##alpine镜像比默认 openjdk体积小 70%+,且减少隐式系统层 #使用镜像站镜像 FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/openjdk:17-jdk-alpine #使用harbor镜像仓库镜像 #xxxx #docker.io/library/buildpack-deps #这是一个包含构建依赖项的Docker镜像。 #它提供各种构建工具和运行库,用于构建不同的应用程序, #特别是那些使用构建包工具(例如Paketo Buildpacks)的应用程序。 # 这个镜像本身并不包含应用程序代码, # 而是为构建过程提供必要的依赖环境, # 从而简化构建过程和镜像大小 # swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/buildpack-deps:jammy #buildpack-deps 上面这个是ubuntu: ##docker pull ##crictl images # 设置环境变量(单层) ENV JAVA_OPTS="-Xms512m -Xmx1024m" \\ SPRING_PROFILES_ACTIVE="prod" \\ SERVER_PORT=8080 ### # 复制 Spring Boot 的可执行ja)(已经包含了所有子模块代码和依赖) # 复制构建产物(分离依赖与代码以利用缓存)注入环境变量 ARG ENV_FILE=./env/dev.env #复制之前打包生成的jar包到指定位置 # 复制环境文件到容器中(使用构建参数 \&\&# 复制启动脚本 COPY payment-api/target/payment-api-0.0.1-SNAPSHOT.jar app.jar \&\© ${ENV_FILE} .env \&\© build/start.sh start.sh # 创建用户并设置权限(单层完成所有权限操作) RUN addgroup -S javauser \&\& adduser -S javauser -G javauser \\ \&\& chown -R javauser:javauser /app \\ \&\& chmod +x start.sh # 切换用户 USER javauser # 健康检查(单层) HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \\ CMD curl -f http://localhost:${SERVER_PORT}/actuator/health \|\| exit 1 # 入口点 ENTRYPOINT \["./start.sh"

EXPOSE 8080

root@jenkins dev-build\]# cat build.sh #!/bin/bash # 定义源目录和目标目录 SOURCE_DIR="/home/$repo/java/payment" TARGET_DIR="$(pwd)/app" IMAGE_NAME="$镜像仓库域名/命名空间/wallet-test" DEFAULT_VERSION="$s01" # 是jenkins传递的版本号$s01 是v构建次数-时间日期方便从 举例v177-20250827-1800 # 设置基础变量 export LANG=zh_CN.UTF-8 export PATH=/opt/maven-3.9.11/bin:/usr/lib/jvm/jdk-17.0.16-oracle-x64/bin:$PATH # 检查参数 if \[ -z "$1" \]; then echo "使用方法: ./build.sh \[环境\] \[版本\]" echo "支持的环境: dev, uat, prd" echo "" echo "示例:" echo " ./build.sh uat" echo " ./build.sh prd v1.0.0" echo " ./build.sh dev" exit 1 fi ENV_NAME=$1 VERSION=$DEFAULT_VERSION # 验证环境参数 case $ENV_NAME in "dev") ENV_FILE=./env/dev.env IMAGE_TAG=$IMAGE_NAME:$VERSION ;; "uat") ENV_FILE=./tmp/huoma-dzg/server/service/pay-of-java/env/ IMAGE_TAG=$IMAGE_NAME:$VERSION ;; "prd") ENV_FILE=./tmp/huoma-dzg/server/service/pay-of-java/env IMAGE_TAG=$IMAGE_NAME:$VERSION ;; \*) echo "\[ERROR\] 不支持的环境: $ENV_NAME" echo "支持的环境: dev, uat, prd" exit 1 ;; esac #调试输出 echo "\[INFO\] 构建环境: $ENV_NAME" #echo "\[INFO\] 环境文件: $ENV_FILE" #echo "\[INFO\] 镜像+标签: $IMAGE_TAG" 1.Maven检查并构建 # 检查 Maven 是否安装 if ! command -v mvn \&\> /dev/null; then echo "\[ERROR\] Maven 未安装或不在 PATH 中" exit 1 fi ###这个需要自己进行选择切换的目录根据java环境不同进行切换对应项目下 cd ../ mvn clean install -DskipTests if \[ $? -ne 0 \]; then echo "\[ERROR\] Maven 构建失败!" exit 1 fi #/build目录下面存放的是 这个.sh脚本和Dockerfile文件 cd ./build ### 验证 JAR 包#根据情况修改 ###主要是查询对应项目下面有没有生成jar包 ###需要手动添加对应关键词 if \[ ! -f "../payment-api/target/"\*.jar \]; then echo "\[ERROR\] 未找到生成的 JAR 包" exit 1 fi # 2. Docker 检查 # 检查 Docker 是否安装 if ! command -v docker \&\> /dev/null; then echo "\[ERROR\] Docker 未安装或不在 PATH 中" exit 1 fi # 检查 Docker 服务是否运行 if ! docker info \&\> /dev/null; then echo "\[ERROR\] Docker 服务未运行" exit 1 fi # 3. 检测并删除已存在的同名镜像 echo "检测镜像是否存在: $IMAGE_TAG" **if** docker images --format "{{.Repository}}:{{.Tag}}" \| grep -q "\^**${** IMAGE_NAME**}** :**${** VERSION**}** $"; **then** echo "发现已存在镜像 **${** IMAGE_NAME**}** :**${** VERSION**}**,执行删除..." # 停止关联容器 running_containers=$(docker ps -a -q --filter "ancestor=**${** IMAGE_NAME**}** :**${** VERSION**}**") **if** \[ -n "$running_containers" \]; **then** echo "停止关联容器:" docker stop $running_containers docker rm $running_containers **fi** # 删除镜像 docker rmi -f "**${** IMAGE_NAME**}** :**${** VERSION**}**" **if** \[ $? -eq 0 \]; **then** echo "旧镜像删除成功!" **else** echo "警告:旧镜像删除失败,可能被其他容器引用" \>\&2 **fi** **else** echo "未发现同名镜像,继续构建..." **fi** # 4. 构建Docker镜像 # 执行 Docker 构建 echo "\[INFO\] 执行命令: docker build -f Dockerfile --build-arg ENV_FILE=$ENV_FILE -t $IMAGE_TAG ." docker build -f Dockerfile --build-arg ENV_FILE="$ENV_FILE" -t "$IMAGE_TAG" ../ if \[ $? -ne 0 \]; then echo "\[ERROR\] Docker 构建失败!" exit 1 fi # 5. 验证构建结果 **# 验证镜像** **echo "\[INFO\] 验证 Docker 镜像..."** **if ! docker images \| grep -q "wallet"; then** **echo "\[ERROR\] Docker 镜像不存在: $IMAGE_TAG"** **exit 1** **fi** # 6. 删除临时文件 #rm -rf "$TARGET_DIR" # 7. 上传镜像到habor镜像仓库 ###docker push "**${** IMAGE_NAME**}** :**${** VERSION**}**"

相关推荐
猷咪2 小时前
C++基础
开发语言·c++
IT·小灰灰2 小时前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧2 小时前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q2 小时前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳02 小时前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾2 小时前
php 对接deepseek
android·开发语言·php
vx_BS813302 小时前
【直接可用源码免费送】计算机毕业设计精选项目03574基于Python的网上商城管理系统设计与实现:Java/PHP/Python/C#小程序、单片机、成品+文档源码支持定制
java·python·课程设计
2601_949868362 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
星火开发设计2 小时前
类型别名 typedef:让复杂类型更简洁
开发语言·c++·学习·算法·函数·知识
qq_177767372 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos