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

This commit is contained in:
2025-08-14 20:32:26 +08:00
parent 1179cbd77a
commit 78a33f408f

View File

@@ -10,6 +10,9 @@ jobs:
name: 构建并推送镜像到仓库注册表 name: 构建并推送镜像到仓库注册表
runs-on: ubuntu runs-on: ubuntu
timeout-minutes: 30 # 设置超时时间,防止无限等待 timeout-minutes: 30 # 设置超时时间,防止无限等待
permissions:
packages: write # 明确请求包管理权限
contents: read # 读取代码权限
steps: steps:
- name: 拉取代码 - name: 拉取代码
@@ -21,20 +24,34 @@ jobs:
run: | run: |
echo "===== 开始Maven构建 =====" echo "===== 开始Maven构建 ====="
/maven/apache-maven-3.9.11/bin/mvn clean package -DskipTests /maven/apache-maven-3.9.11/bin/mvn clean package -DskipTests
echo "===== 验证构建结果 ====="
if [ ! -d "./target" ] || [ -z "$(ls -A ./target/*.jar 2>/dev/null)" ]; then
echo "错误Maven构建未生成有效JAR包"
exit 1
fi
echo "===== Maven构建完成 =====" echo "===== Maven构建完成 ====="
- name: 构建并推送Docker镜像 - name: 构建并推送Docker镜像
env: env:
# Gitea容器注册表地址(请确认是否正确) # Gitea容器注册表地址
GITEA_REGISTRY: 172.100.10.45:3000 GITEA_REGISTRY: 172.100.10.45:3000
# 仓库路径(组织/仓库名,严格区分大小写) # 仓库路径(严格区分大小写)
REPO_PATH: by2025/dockerimage REPO_PATH: by2025/dockerimage
# Gitea内置认证令牌 # 使用手动创建的专用推送令牌(推荐)
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_TOKEN: ${{ secrets.DOCKER_PUSH_TOKEN }}
# 当前仓库信息(用于调试)
CURRENT_REPO: ${{ github.repository }}
run: | run: |
echo "===== 环境信息验证 ====="
echo "当前仓库: $CURRENT_REPO"
echo "目标仓库路径: $REPO_PATH"
echo "镜像仓库地址: $GITEA_REGISTRY"
echo "===== 登录到Gitea容器注册表 =====" echo "===== 登录到Gitea容器注册表 ====="
# 登录并检查结果 # 登录并检查结果
if ! echo "$GITEA_TOKEN" | docker login $GITEA_REGISTRY -u ${{ github.actor }} --password-stdin; then if ! echo "$GITEA_TOKEN" | docker login $GITEA_REGISTRY -u ${{ github.actor }} --password-stdin; then
echo "错误:登录到容器注册表失败" echo "错误:登录到容器注册表失败"
echo "请检查令牌权限和仓库地址是否正确"
exit 1 exit 1
fi fi
@@ -52,25 +69,35 @@ jobs:
docker_context=$(dirname "$dockerfile") docker_context=$(dirname "$dockerfile")
# 生成镜像标签(基于目录名,转换为小写并替换斜杠) # 生成镜像标签(基于目录名,转换为小写并替换斜杠)
image_tag=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-' | tr '[:upper:]' '[:lower:]') image_tag=$(echo "$docker_context" | sed 's|./||g' | tr '/' '-' | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9_-]//g')
# 完整镜像名称 # 完整镜像名称确保符合Docker规范
full_image_name="$GITEA_REGISTRY/$REPO_PATH:$image_tag-${{ github.sha }}" full_image_name="$GITEA_REGISTRY/$REPO_PATH:$image_tag-${{ github.sha }}"
echo "镜像名称: $full_image_name"
echo "构建镜像: $full_image_name" echo "===== 构建镜像 ====="
if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then
echo "错误:构建镜像 $full_image_name 失败" echo "错误:构建镜像 $full_image_name 失败"
exit 1 exit 1
fi fi
echo "推送镜像: $full_image_name" echo "===== 测试镜像 ====="
if ! docker images "$full_image_name" | grep -q "$full_image_name"; then
echo "错误:镜像构建后未找到 $full_image_name"
exit 1
fi
echo "===== 推送镜像 ====="
if ! docker push "$full_image_name"; then if ! docker push "$full_image_name"; then
echo "错误:推送镜像 $full_image_name 失败" echo "错误:推送镜像 $full_image_name 失败"
echo "可能原因令牌无write:packages权限、仓库不存在或网络问题"
# 尝试获取详细错误信息
curl -u ${{ github.actor }}:$GITEA_TOKEN $GITEA_REGISTRY/v2/_catalog
exit 1 exit 1
fi fi
# 推送latest标签 # 推送latest标签
latest_image="$GITEA_REGISTRY/$REPO_PATH:$image_tag-latest" latest_image="$GITEA_REGISTRY/$REPO_PATH:$image_tag-latest"
echo "推送最新标签: $latest_image" echo "===== 推送最新标签: $latest_image ====="
docker tag "$full_image_name" "$latest_image" docker tag "$full_image_name" "$latest_image"
if ! docker push "$latest_image"; then if ! docker push "$latest_image"; then
echo "错误:推送最新标签 $latest_image 失败" echo "错误:推送最新标签 $latest_image 失败"
@@ -80,5 +107,6 @@ jobs:
echo "===== 清理操作 =====" echo "===== 清理操作 ====="
docker logout $GITEA_REGISTRY docker logout $GITEA_REGISTRY
# 可选:清理构建的镜像释放空间
docker system prune -f
echo "===== 所有操作完成 =====" echo "===== 所有操作完成 ====="