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

91 lines
3.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 # 设置超时时间,防止无限等待
steps:
- name: 拉取代码
uses: actions/checkout@v4
with:
fetch-depth: 0 # 拉取完整历史,确保版本信息正确
- name: 使用Maven构建项目
run: |
echo "===== 开始Maven构建 ====="
mvn clean package -DskipTests
echo "===== Maven构建完成 ====="
# 验证构建结果
if [ ! -d "./target" ]; then
echo "错误Maven构建未生成target目录"
exit 1
fi
- name: 构建并推送Docker镜像
env:
# Gitea容器注册表地址请确认是否正确
GITEA_REGISTRY: 172.100.10.45:3000
# 仓库路径(组织/仓库名,严格区分大小写)
REPO_PATH: by2025/SmartParks
# Gitea内置认证令牌
GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
run: |
echo "===== 登录到Gitea容器注册表 ====="
# 登录并检查结果
if ! echo "$GITEA_TOKEN" | docker login $GITEA_REGISTRY -u ${{ github.actor }} --password-stdin; then
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:]')
# 完整镜像名称
full_image_name="$GITEA_REGISTRY/$REPO_PATH:$image_tag-${{ github.sha }}"
echo "构建镜像: $full_image_name"
if ! docker build -t "$full_image_name" -f "$dockerfile" "$docker_context"; then
echo "错误:构建镜像 $full_image_name 失败"
exit 1
fi
echo "推送镜像: $full_image_name"
if ! docker push "$full_image_name"; then
echo "错误:推送镜像 $full_image_name 失败"
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
echo "===== 所有操作完成 ====="