Some checks failed
Build and Push to Target Registry / 构建并推送镜像到目标仓库 (push) Failing after 1m54s
80 lines
2.8 KiB
YAML
80 lines
2.8 KiB
YAML
name: Build and Push to Target Registry
|
||
|
||
# 监听master分支的推送事件
|
||
on:
|
||
push:
|
||
branches: [ master ]
|
||
|
||
jobs:
|
||
build-and-deploy:
|
||
name: 构建并推送镜像到目标仓库
|
||
runs-on: ubuntu
|
||
timeout-minutes: 30
|
||
|
||
steps:
|
||
- name: 拉取代码
|
||
uses: http://git.missmoc.top/mocheng/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
|
||
- name: 使用Maven构建项目
|
||
run: |
|
||
echo "===== 开始Maven构建 ====="
|
||
/maven/apache-maven-3.9.11/bin/mvn clean package -DskipTests
|
||
|
||
echo "===== Maven构建完成 ====="
|
||
|
||
- name: 构建并推送Docker镜像
|
||
env:
|
||
# 替换为你的Docker Registry地址(例如:localhost:5000 或 192.168.1.100:5000)
|
||
TARGET_REGISTRY: 127.0.0.1:5000
|
||
# 目标仓库中的项目名称
|
||
TARGET_PROJECT: smartparks
|
||
run: |
|
||
echo "===== 环境信息 ====="
|
||
echo "目标仓库: $TARGET_REGISTRY/$TARGET_PROJECT"
|
||
|
||
# 【删除登录步骤】因为仓库无认证,无需登录
|
||
|
||
echo "===== 查找项目中的Dockerfile ====="
|
||
dockerfiles=$(find . -type f -name "Dockerfile" ! -path "./.git/*")
|
||
if [ -z "$dockerfiles" ]; then
|
||
echo "警告:未找到任何Dockerfile"
|
||
exit 0
|
||
fi
|
||
|
||
# 处理每个Dockerfile(后续构建、推送逻辑与之前类似,保持不变)
|
||
echo "$dockerfiles" | while read -r dockerfile; do
|
||
echo "===== 处理Dockerfile: $dockerfile ====="
|
||
|
||
docker_context=$(dirname "$dockerfile")
|
||
image_tag=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9_-]//g')
|
||
full_image_name="$TARGET_REGISTRY/$TARGET_PROJECT:$image_tag-${{ github.sha }}"
|
||
echo "镜像名称: $full_image_name"
|
||
|
||
echo "===== 构建镜像 ====="
|
||
if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then
|
||
echo "错误:构建镜像失败"
|
||
exit 1
|
||
fi
|
||
|
||
echo "===== 推送镜像到仓库 ====="
|
||
if ! docker push "$full_image_name"; then
|
||
echo "错误:推送镜像失败,请检查仓库是否可访问"
|
||
exit 1
|
||
fi
|
||
|
||
# 推送latest标签(逻辑保持不变)
|
||
latest_image="$TARGET_REGISTRY/$TARGET_PROJECT:$image_tag-latest"
|
||
echo "===== 推送最新标签: $latest_image ====="
|
||
docker tag "$full_image_name" "$latest_image"
|
||
if ! docker push "$latest_image"; then
|
||
echo "错误:推送latest标签失败"
|
||
exit 1
|
||
fi
|
||
done
|
||
|
||
echo "===== 清理操作 ====="
|
||
docker system prune -f
|
||
echo "===== 所有操作完成 ====="
|