205 lines
6.1 KiB
YAML
205 lines
6.1 KiB
YAML
# 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}"
|