add ci/cd test yml file (not test)
Some checks failed
Build and Push Docker Image / docker (push) Has been cancelled
Some checks failed
Build and Push Docker Image / docker (push) Has been cancelled
This commit is contained in:
74
.gitea/workflows/docker-build.yml
Normal file
74
.gitea/workflows/docker-build.yml
Normal 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
47
.woodpecker.simple.yml
Normal 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
204
.woodpecker.yml
Normal 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}"
|
||||||
Reference in New Issue
Block a user