SmartParks/.gitea/workflows/master.yml
mocheng 515d473da0
Some checks failed
Build and Push to SmartParks Registry / 构建并推送镜像到仓库注册表 (push) Failing after 1m53s
新增工作流3
2025-08-14 20:35:16 +08:00

109 lines
4.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Build and Push to SmartParks Registry
# 监听master分支的推送事件
on:
push:
branches: [ master ]
jobs:
build-and-deploy:
name: 构建并推送镜像到仓库注册表
runs-on: ubuntu
timeout-minutes: 30 # 设置超时时间,防止无限等待
permissions:
packages: write # 明确请求包管理权限
contents: read # 读取代码权限
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:
# Gitea容器注册表地址
GITEA_REGISTRY: 172.100.10.45:3000
# 仓库路径(严格区分大小写)
REPO_PATH: by2025/dockerimage
# 使用手动创建的专用推送令牌(推荐)
GITEA_TOKEN: ${{ secrets.DOCKER_PUSH_TOKEN }}
# 当前仓库信息(用于调试)
CURRENT_REPO: ${{ github.repository }}
run: |
echo "===== 环境信息验证 ====="
echo "当前仓库: $CURRENT_REPO"
echo "目标仓库路径: $REPO_PATH"
echo "镜像仓库地址: $GITEA_REGISTRY"
echo "===== 登录到Gitea容器注册表 ====="
# 登录并检查结果
if ! echo "$GITEA_TOKEN" | docker login $GITEA_REGISTRY -u ${{ github.actor }} --password-stdin; then
echo "错误:登录到容器注册表失败"
echo "请检查令牌权限和仓库地址是否正确"
exit 1
fi
echo "===== 查找项目中的Dockerfile ====="
# 查找所有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')
# 完整镜像名称确保符合Docker规范
full_image_name="$GITEA_REGISTRY/$REPO_PATH:$image_tag-${{ github.sha }}"
echo "镜像名称: $full_image_name"
echo "===== 构建镜像 ====="
if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then
echo "错误:构建镜像 $full_image_name 失败"
exit 1
fi
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
echo "错误:推送镜像 $full_image_name 失败"
echo "可能原因令牌无write:packages权限、仓库不存在或网络问题"
# 尝试获取详细错误信息
curl -u ${{ github.actor }}:$GITEA_TOKEN $GITEA_REGISTRY/v2/_catalog
exit 1
fi
# 推送latest标签
latest_image="$GITEA_REGISTRY/$REPO_PATH:$image_tag-latest"
echo "===== 推送最新标签: $latest_image ====="
docker tag "$full_image_name" "$latest_image"
if ! docker push "$latest_image"; then
echo "错误:推送最新标签 $latest_image 失败"
exit 1
fi
done
echo "===== 清理操作 ====="
docker logout $GITEA_REGISTRY
# 可选:清理构建的镜像释放空间
docker system prune -f
echo "===== 所有操作完成 ====="