当前位置: 首页 > news >正文

流水线用到的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 &&COPY ${ENV_FILE} .env &&COPY 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}"

http://www.xdnf.cn/news/1376929.html

相关文章:

  • 如何安装 mysql-installer-community-8.0.21.0.tar.gz(Linux 详细教程附安装包下载)​
  • 神经网络学习笔记11——高效卷积神经网络架构SqueezeNet
  • 聊一聊 单体分布式 和 微服务分布式
  • 深度学习——优化函数
  • 自学嵌入式第二十九天:Linux系统编程-线程
  • flume监控文件写入 Kafka 实战:解耦应用与消息队列的最佳实践
  • 在语言模型监督式微调(SFT)中的 负对数似然(Negative Log-Likelihood, NLL)等价于最大化似然
  • 软考-系统架构设计师 管理信息系统(MIS)详细讲解
  • 为什么编码智能体可以重塑开发范式?
  • 【Mascaret】QGIS中Mascaret插件的使用
  • ESP8266:Arduino学习
  • 高并发内存池(12)-ThreadCache回收内存
  • 【HTML】隐藏滚动条但保留功能
  • 什么是AI+?什么是人工智能+?
  • redis---set详解
  • ICCV 2025 | 清华IEDA提出GUAVA,单图创建可驱动的上半身3D化身!实时、高效,还能捕捉细腻的面部表情和手势。
  • 《MongoDB 常用命令详解:从数据库操作到高级查询》
  • Windows/Linux 环境下 Jmeter 性能测试的安装与使用
  • 未成功:使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)
  • Linux学习-TCP并发服务器构建
  • 在 Windows 上部署 Go 语言开发环境
  • 数据分析编程第五步:数据准备与整理
  • JoyAgent-JDGenie开源多智能体系统详解:架构、部署与企业级应用案例
  • 5G NR学习笔记 预编码(precoding)和波束赋形(beamforming)
  • 嵌入式第三十九天(TCP多任务并发)
  • QT应用层项目20250822
  • MAX系列FPGA型号对比及低功耗特性分析
  • 【Linux 小实战】自定义 Shell 的编写
  • 把CentOS 7默认yum源改成腾讯云镜像
  • 移动端(微信等)使用 vConsole调试console