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