add ci/cd test yml file (not test)
Some checks failed
Build and Push Docker Image / docker (push) Has been cancelled

This commit is contained in:
2025-10-15 22:02:08 +08:00
parent 1248cd187d
commit cb3b5f5aa6
3 changed files with 325 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
# GitHub Actions 工作流 - 构建和推送 Docker 镜像
name: Build and Push Docker Image
on:
push:
branches: [ main, develop ]
tags: [ 'v*' ]
pull_request:
branches: [ main ]
workflow_dispatch:
inputs:
image_tag:
description: "Tag to push (leave empty to use 'latest')"
required: false
default: ""
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
# 解析镜像标签
- name: Resolve TAG
id: meta
env:
INPUT_TAG: ${{ github.event.inputs.image_tag || '' }}
run: |
set -euo pipefail
if [ -n "$INPUT_TAG" ]; then
TAG="$INPUT_TAG"
elif [ "${{ github.event_name }}" = "push" ] && [[ "${{ github.ref }}" =~ ^refs/tags/v ]]; then
TAG="${GITHUB_REF#refs/tags/}"
elif [ "${{ github.event_name }}" = "push" ] && [ "${{ github.ref }}" = "refs/heads/main" ]; then
TAG="latest"
elif [ "${{ github.event_name }}" = "push" ]; then
TAG="${GITHUB_REF#refs/heads/}"
else
TAG="dev"
fi
# 规范化标签
TAG="$(printf '%s' "$TAG" | tr '[:upper:]' '[:lower:]' | sed -E 's#[^a-z0-9._-]#-#g; s#/+#-#g; s#^[.-]+##; s#[.-]+$##')"
TAG="${TAG:0:128}"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
echo "Resolved TAG: $TAG"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and Push Docker Image
uses: docker/build-push-action@v5
with:
context: .
file: ./docker/Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/vinatools:${{ steps.meta.outputs.tag }}
${{ secrets.DOCKERHUB_USERNAME }}/vinatools:latest
build-args: |
VINA_VERSION=${{ vars.VINA_VERSION || '1.2.7' }}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Image Digest
run: echo ${{ steps.docker_build.outputs.digest }}

47
.woodpecker.simple.yml Normal file
View File

@@ -0,0 +1,47 @@
# 简化版 Woodpecker CI 配置
# 适用于快速测试和简单部署
when:
event: [push, manual]
branch: [main, develop]
environment:
DOCKERHUB_USERNAME: ${DOCKERHUB_USERNAME}
DOCKERHUB_TOKEN: ${DOCKERHUB_TOKEN}
steps:
# 构建和推送
- name: build-and-push
image: /bin/zsh
commands:
- |
set -e
echo "=== 构建 vinatools 镜像 ==="
# 设置镜像标签
if [ "${CI_BUILD_EVENT}" = "tag" ]; then
TAG="${CI_COMMIT_TAG}"
else
TAG="${CI_COMMIT_BRANCH:-latest}"
fi
# 清理标签
TAG=$(echo "$TAG" | sed 's/[^a-zA-Z0-9._-]/-/g')
IMAGE="${DOCKERHUB_USERNAME}/vinatools:${TAG}"
echo "构建镜像: ${IMAGE}"
# 登录 DockerHub
echo "${DOCKERHUB_TOKEN}" | docker login --username "${DOCKERHUB_USERNAME}" --password-stdin
# 构建并推送
docker buildx create --name builder --use || true
docker buildx build \
--platform linux/amd64,linux/arm64 \
--file docker/Dockerfile \
--tag "${IMAGE}" \
--tag "${DOCKERHUB_USERNAME}/vinatools:latest" \
--push \
.
echo "✅ 构建完成: ${IMAGE}"

204
.woodpecker.yml Normal file
View File

@@ -0,0 +1,204 @@
# Woodpecker CI 配置文件 - AutoDock Vina Tools
# 用于自动化构建和推送 Docker 镜像到 DockerHub
# 触发条件
when:
event: [push, manual, pull_request]
branch: [main, develop, release/*]
# 全局环境变量
environment:
DOCKERHUB_USERNAME: ${DOCKERHUB_USERNAME}
DOCKERHUB_TOKEN: ${DOCKERHUB_TOKEN}
VINA_VERSION: ${VINA_VERSION:-1.2.7}
# 管道步骤
steps:
# 1. 环境信息检查
- name: env-info
image: /bin/zsh
commands:
- |
set -e
echo "=== 环境信息 ==="
echo "PWD: $(pwd)"
echo "Agent: ${CI_AGENT_NAME:-unknown}"
echo "Backend: ${CI_SYSTEM_BACKEND} Platform: ${CI_SYSTEM_PLATFORM}"
echo "Event: ${CI_BUILD_EVENT}"
echo "Branch: ${CI_COMMIT_BRANCH}"
echo "Commit: ${CI_COMMIT_SHA}"
echo "Vina Version: ${VINA_VERSION}"
echo "DockerHub User: ${DOCKERHUB_USERNAME:-未设置}"
echo "=== 系统信息 ==="
uname -a
which docker || echo "Docker 未安装"
which git || echo "Git 未安装"
echo "=== 项目结构 ==="
ls -la
echo "=== Docker 文件检查 ==="
ls -la docker/ || echo "docker 目录不存在"
# 2. 工具版本检查
- name: tools-versions
image: /bin/zsh
commands:
- |
set -e
echo "=== 工具版本检查 ==="
echo "[Docker]"
docker --version || echo "Docker 不可用"
docker buildx version || echo "Docker Buildx 不可用"
echo "[Git]"
git --version || echo "Git 不可用"
echo "[Woodpecker]"
woodpecker-cli --version || echo "Woodpecker CLI 不可用"
echo "[插件检查]"
which plugin-docker-buildx || echo "plugin-docker-buildx 不可用"
which plugin-git || echo "plugin-git 不可用"
# 3. 代码质量检查
- name: code-quality
image: /bin/zsh
commands:
- |
set -e
echo "=== 代码质量检查 ==="
echo "检查 Dockerfile 语法..."
if [ -f "docker/Dockerfile" ]; then
echo "Dockerfile 存在"
# 简单的语法检查
grep -n "FROM\|RUN\|COPY\|ENV" docker/Dockerfile | head -10
else
echo "错误: Dockerfile 不存在"
exit 1
fi
echo "检查 docker-compose.yml..."
if [ -f "docker/docker-compose.yml" ]; then
echo "docker-compose.yml 存在"
else
echo "错误: docker-compose.yml 不存在"
exit 1
fi
echo "检查项目文件..."
ls -la docker/
echo "代码质量检查完成"
# 4. Docker 镜像构建
- name: docker-build
image: /bin/zsh
environment:
DOCKER_BUILDKIT: 1
BUILDX_NO_DEFAULT_ATTESTATIONS: 1
commands:
- |
set -e
echo "=== Docker 镜像构建 ==="
# 设置镜像标签
if [ "${CI_BUILD_EVENT}" = "tag" ]; then
IMAGE_TAG="${CI_COMMIT_TAG}"
elif [ "${CI_BUILD_EVENT}" = "pull_request" ]; then
IMAGE_TAG="pr-${CI_COMMIT_PULL_REQUEST}"
else
IMAGE_TAG="${CI_COMMIT_BRANCH:-latest}"
fi
# 清理标签中的特殊字符
IMAGE_TAG=$(echo "$IMAGE_TAG" | sed 's/[^a-zA-Z0-9._-]/-/g')
IMAGE_NAME="vinatools"
FULL_IMAGE_NAME="${DOCKERHUB_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}"
LATEST_IMAGE_NAME="${DOCKERHUB_USERNAME}/${IMAGE_NAME}:latest"
echo "构建镜像: ${FULL_IMAGE_NAME}"
echo "Vina 版本: ${VINA_VERSION}"
# 创建 buildx builder
docker buildx create --name vinatools-builder --use || true
docker buildx inspect --bootstrap
# 构建镜像
docker buildx build \
--platform linux/amd64,linux/arm64 \
--build-arg VINA_VERSION="${VINA_VERSION}" \
--file docker/Dockerfile \
--tag "${FULL_IMAGE_NAME}" \
--tag "${LATEST_IMAGE_NAME}" \
--push \
.
echo "镜像构建完成: ${FULL_IMAGE_NAME}"
echo "镜像构建完成: ${LATEST_IMAGE_NAME}"
# 5. 镜像验证
- name: image-verify
image: /bin/zsh
commands:
- |
set -e
echo "=== 镜像验证 ==="
# 设置镜像标签(与构建步骤一致)
if [ "${CI_BUILD_EVENT}" = "tag" ]; then
IMAGE_TAG="${CI_COMMIT_TAG}"
elif [ "${CI_BUILD_EVENT}" = "pull_request" ]; then
IMAGE_TAG="pr-${CI_COMMIT_PULL_REQUEST}"
else
IMAGE_TAG="${CI_COMMIT_BRANCH:-latest}"
fi
IMAGE_TAG=$(echo "$IMAGE_TAG" | sed 's/[^a-zA-Z0-9._-]/-/g')
IMAGE_NAME="vinatools"
FULL_IMAGE_NAME="${DOCKERHUB_USERNAME}/${IMAGE_NAME}:${IMAGE_TAG}"
echo "验证镜像: ${FULL_IMAGE_NAME}"
# 拉取并检查镜像
docker pull "${FULL_IMAGE_NAME}" || echo "镜像拉取失败,可能还在推送中"
# 检查镜像信息
docker image inspect "${FULL_IMAGE_NAME}" || echo "镜像检查失败"
echo "镜像验证完成"
# 6. 清理构建缓存
- name: cleanup
image: /bin/zsh
commands:
- |
set -e
echo "=== 清理构建缓存 ==="
# 清理 buildx builder
docker buildx rm vinatools-builder || echo "Builder 清理失败"
# 清理本地镜像
docker image prune -f || echo "镜像清理失败"
# 清理构建缓存
docker builder prune -f || echo "构建缓存清理失败"
echo "清理完成"
# 7. 通知(可选)
- name: notify
image: /bin/zsh
when:
status: [success, failure]
commands:
- |
set -e
echo "=== 构建通知 ==="
if [ "${CI_BUILD_STATUS}" = "success" ]; then
echo "✅ 构建成功!"
echo "镜像已推送到 DockerHub: ${DOCKERHUB_USERNAME}/vinatools"
else
echo "❌ 构建失败!"
echo "请检查构建日志"
fi
echo "构建状态: ${CI_BUILD_STATUS}"
echo "构建时间: $(date)"
echo "提交信息: ${CI_COMMIT_MESSAGE}"