新增工作流3
Some checks failed
Build and Push to SmartParks Registry / 构建并推送镜像到仓库注册表 (push) Failing after 0s

This commit is contained in:
2025-08-14 20:08:14 +08:00
parent 1e35f72bd9
commit 72b431f1a9

View File

@@ -1,61 +1,90 @@
name: Build and Push Docker Images name: Build and Push to SmartParks Registry
# 监听master分支的push事件 # 监听master分支的推送事件
on: on:
push: push:
branches: [ master ] branches: [ master ]
jobs: jobs:
build-and-push: build-and-deploy:
# 使用当前运行器已安装Java、Maven和Docker name: 构建并推送镜像到仓库注册表
runs-on: ubuntu runs-on: ubuntu
timeout-minutes: 30 # 设置超时时间,防止无限等待
steps: steps:
# 拉取代码 - name: 拉取代码
- name: Checkout code uses: actions/checkout@v4
uses: http://git.missmoc.top/mocheng/checkout@v4 with:
fetch-depth: 0 # 拉取完整历史,确保版本信息正确
# 使用服务器上的Maven构建项目 - name: 使用Maven构建项目
- name: Build with Maven
run: | run: |
echo "开始使用Maven构建项目..." echo "===== 开始Maven构建 ====="
/maven/apache-maven-3.9.11/bin/mvn clean package -DskipTests mvn clean package -DskipTests
echo "Maven构建完成" echo "===== Maven构建完成 ====="
# 验证构建结果
if [ ! -d "./target" ]; then
echo "错误Maven构建未生成target目录"
exit 1
fi
# 查找所有Dockerfile并构建推送镜像 - name: 构建并推送Docker镜像
- name: Build and push Docker images
env: env:
# 私有仓库地址(请替换为实际地址 # Gitea容器注册表地址请确认是否正确
DOCKER_REGISTRY: 172.100.10.45:3000 GITEA_REGISTRY: 172.100.10.45:3000
# 私有仓库认证信息在Gitea仓库设置中配置secrets # 仓库路径(组织/仓库名,严格区分大小写
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} REPO_PATH: by2025/SmartParks
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} # Gitea内置认证令牌
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: | run: |
echo "登录到私有Docker仓库..." echo "===== 登录到Gitea容器注册表 ====="
echo "$DOCKER_PASSWORD" | docker login $DOCKER_REGISTRY -u $DOCKER_USERNAME --password-stdin # 登录并检查结果
if ! echo "$GITEA_TOKEN" | docker login $GITEA_REGISTRY -u ${{ github.actor }} --password-stdin; then
echo "错误:登录到容器注册表失败"
exit 1
fi
echo "查找项目中的所有Dockerfile..." echo "===== 查找项目中的Dockerfile ====="
# 查找所有Dockerfile(排除.git目录 # 查找所有Dockerfile并检查是否存在
find . -type f -name "Dockerfile" ! -path "./.git/*" | while read -r dockerfile; do dockerfiles=$(find . -type f -name "Dockerfile" ! -path "./.git/*")
echo "处理Dockerfile: $dockerfile" if [ -z "$dockerfiles" ]; then
echo "警告未找到任何Dockerfile"
exit 0
fi
# 处理每个Dockerfile
echo "$dockerfiles" | while read -r dockerfile; do
echo "===== 处理Dockerfile: $dockerfile ====="
# 获取Dockerfile所在目录
docker_context=$(dirname "$dockerfile") docker_context=$(dirname "$dockerfile")
# 生成镜像标签(基于目录名,转换为小写并替换斜杠)
# 生成镜像名称(基于目录结构) image_tag=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-' | tr '[:upper:]' '[:lower:]')
image_name=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-') # 完整镜像名称
full_image_name="$DOCKER_REGISTRY/$image_name:${{ github.sha }}" full_image_name="$GITEA_REGISTRY/$REPO_PATH:$image_tag-${{ github.sha }}"
echo "构建镜像: $full_image_name" echo "构建镜像: $full_image_name"
docker build -t "$full_image_name" -f "$dockerfile" "$docker_context" if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then
echo "错误:构建镜像 $full_image_name 失败"
exit 1
fi
echo "推送镜像: $full_image_name" echo "推送镜像: $full_image_name"
docker push "$full_image_name" if ! docker push "$full_image_name"; then
echo "错误:推送镜像 $full_image_name 失败"
exit 1
fi
# 可选:添加latest标签并推送 # 推送latest标签
docker tag "$full_image_name" "$DOCKER_REGISTRY/$image_name:latest" latest_image="$GITEA_REGISTRY/$REPO_PATH:$image_tag-latest"
docker push "$DOCKER_REGISTRY/$image_name:latest" echo "推送最新标签: $latest_image"
docker tag "$full_image_name" "$latest_image"
if ! docker push "$latest_image"; then
echo "错误:推送最新标签 $latest_image 失败"
exit 1
fi
done done
echo "所有镜像构建和推送完成" echo "===== 清理操作 ====="
docker logout $DOCKER_REGISTRY docker logout $GITEA_REGISTRY
echo "===== 所有操作完成 ====="