完整的手动模拟CICD流程(Microsoft ApplicationInsights-Java)

完整的手动模拟CICD流程:构建Microsoft ApplicationInsights-Java的Docker镜像

1. 环境准备

创建项目目录

mkdir -p ~/appinsights-build
cd ~/appinsights-build

准备必要的工具

# 确保Docker已安装
sudo apt-get update
sudo apt-get install -y docker.io git curl

# 添加用户到docker组(需要重新登录)
sudo usermod -aG docker $USER

2. 手动拉取代码

# 克隆仓库
git clone https://github.com/microsoft/ApplicationInsights-Java.git
cd ApplicationInsights-Java

# 切换到特定版本(根据日志中的commit)
git checkout f0d5f508f89df9a05aeaed88749394a57adb973b

3. 创建Dockerfile

创建 Dockerfile

FROM mcr.microsoft.com/devcontainers/java:8-bullseye

# 设置工作目录
WORKDIR /workspace

# 复制项目文件
COPY . /workspace/

# 安装构建工具和依赖
RUN apt-get update && apt-get install -y \
    fontconfig \
    libfreetype6 \
    libfreetype6-dev \
    docker.io \
    && rm -rf /var/lib/apt/lists/*

# 设置Gradle缓存权限
RUN mkdir -p /root/.gradle && chmod 755 /root/.gradle

# 验证环境
RUN java -version && \
    javac -version

# 设置构建命令
CMD ["./gradlew", "build", "-x", "test", "--no-daemon"]

4. 创建Gradle初始化脚本(解决依赖问题)

创建 .gradle-init-script.gradle

// 兼容Gradle 4.1的初始化脚本
allprojects {
    buildscript {
        repositories {
            mavenCentral()
            jcenter()
        }
    }
    
    repositories {
        mavenCentral()
        jcenter()
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
}

// 解决插件仓库配置(Gradle 4.1兼容版本)
gradle.settingsEvaluated { settings ->
    settings.pluginManagement {
        repositories {
            maven {
                url "https://plugins.gradle.org/m2/"
            }
            maven {
                url "https://repo1.maven.org/maven2"
            }
            jcenter()
        }
    }
}

5. 创建构建脚本

创建 build.sh

#!/bin/bash
set -e

echo "=== ApplicationInsights-Java CICD模拟构建 ==="

# 环境变量
IMAGE_NAME="appinsights-java"
VERSION="1.0.0"
CONTAINER_NAME="appinsights-builder"

echo "1. 清理旧容器和镜像..."
docker stop $CONTAINER_NAME || true
docker rm $CONTAINER_NAME || true
docker rmi $IMAGE_NAME:$VERSION || true

echo "2. 构建Docker镜像..."
docker build -t $IMAGE_NAME:$VERSION .

echo "3. 运行构建容器..."
docker run --name $CONTAINER_NAME \
    --memory=4g \
    --cpus=2 \
    $IMAGE_NAME:$VERSION

echo "4. 提取构建产物..."
docker cp $CONTAINER_NAME:/workspace/build ./build-output/

echo "5. 检查构建结果..."
if [ -d "./build-output/libs" ]; then
    echo "✅ 构建成功!生成的JAR文件:"
    ls -la ./build-output/libs/
else
    echo "❌ 构建失败"
    exit 1
fi

echo "6. 清理临时容器..."
docker rm $CONTAINER_NAME

echo "=== 构建完成 ==="

6. 分步执行CICD流程

步骤1: 基础镜像构建

# 给构建脚本执行权限
chmod +x build.sh

# 执行构建
./build.sh

步骤2: 多阶段构建(优化版本)

创建 Dockerfile.multistage

# 构建阶段
FROM mcr.microsoft.com/devcontainers/java:8-bullseye AS builder

WORKDIR /workspace
COPY . .

# 安装构建依赖
RUN apt-get update && apt-get install -y fontconfig libfreetype6 libfreetype6-dev

# 使用初始化脚本构建
RUN ./gradlew build -x test --no-daemon --init-script .gradle-init-script.gradle

# 运行时阶段
FROM openjdk:8-jre-slim

WORKDIR /app
COPY --from=builder /workspace/build/libs/*.jar app.jar

# 创建非root用户
RUN groupadd -r appuser && useradd -r -g appuser appuser
USER appuser

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

步骤3: 运行测试(可选)

创建 test.sh

#!/bin/bash
echo "=== 运行测试 ==="

# 运行单元测试
docker run --rm \
    -v $(pwd):/workspace \
    mcr.microsoft.com/devcontainers/java:8-bullseye \
    bash -c "cd /workspace && ./gradlew test --no-daemon"

# 检查测试结果
if [ $? -eq 0 ]; then
    echo "✅ 所有测试通过"
else
    echo "❌ 测试失败"
    exit 1
fi

7. 完整的CICD流水线脚本

创建 cicd-pipeline.sh

#!/bin/bash
set -e

echo "🚀 开始CICD流水线执行"

# 阶段1: 代码质量检查
echo "=== 阶段1: 代码检查 ==="
docker run --rm -v $(pwd):/workspace \
    mcr.microsoft.com/devcontainers/java:8-bullseye \
    bash -c "cd /workspace && ./gradlew check --no-daemon"

# 阶段2: 构建
echo "=== 阶段2: 构建 ==="
./build.sh

# 阶段3: 测试
echo "=== 阶段3: 测试 ==="
./test.sh

# 阶段4: 安全扫描(可选)
echo "=== 阶段4: 安全扫描 ==="
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
    -v $(pwd):/src \
    aquasec/trivy:latest image appinsights-java:1.0.0

# 阶段5: 推送镜像(模拟)
echo "=== 阶段5: 镜像归档 ==="
docker save appinsights-java:1.0.0 -o appinsights-java-1.0.0.tar

echo "✅ CICD流水线执行完成"

8. 手动验证构建结果

# 检查构建产物
find ./build-output -name "*.jar" -type f

# 验证JAR文件
jar tf ./build-output/libs/applicationinsights-core-*.jar | head -10

# 清理环境
docker system prune -f

使用说明

执行完整流水线:

chmod +x *.sh
./cicd-pipeline.sh

仅构建:

./build.sh

仅测试:

./test.sh

CICD关键环节完成状态

环节状态说明
环境准备Docker环境配置完成
依赖管理Gradle依赖配置完成
构建执行自动化构建流程
测试验证单元测试执行
产物生成JAR文件生成
安全扫描镜像安全扫描
镜像归档镜像打包保存

您可以根据实际需求调整各阶段的参数和配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值