From 13c8e8359439a3f64bf92400567188d934eed05f Mon Sep 17 00:00:00 2001 From: ben Date: Mon, 2 Feb 2026 01:50:39 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AE=9E=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E5=92=8C=20Docker=20=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/build-and-docker.yml | 228 ++++++++++++++++++++++++++ .gitea/workflows/test-runner.yml | 37 ----- 2 files changed, 228 insertions(+), 37 deletions(-) create mode 100644 .gitea/workflows/build-and-docker.yml delete mode 100644 .gitea/workflows/test-runner.yml diff --git a/.gitea/workflows/build-and-docker.yml b/.gitea/workflows/build-and-docker.yml new file mode 100644 index 0000000..333ef84 --- /dev/null +++ b/.gitea/workflows/build-and-docker.yml @@ -0,0 +1,228 @@ +name: Build and Docker Pipeline + +on: + push: + branches: [main] + workflow_dispatch: + schedule: + - cron: '0 2 * * *' # 每天凌晨2点运行 + +env: + REGISTRY: gitea.tailnet-68f9.ts.net + IMAGE_NAME: ben/modelscope-builder + +jobs: + # 任务1: 环境检查和基础构建 + build-info: + runs-on: ubuntu + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Runner Environment Info + run: | + echo "=== DSW Runner 环境信息 ===" + echo "主机名: $(hostname)" + echo "操作系统: $(uname -a)" + echo "CPU 信息:" + nproc + cat /proc/cpuinfo | grep "model name" | head -1 + echo "内存信息:" + free -h + echo "磁盘空间:" + df -h + echo "当前时间: $(date)" + echo "运行用户: $(whoami)" + echo "工作目录: $(pwd)" + + - name: Check Tools Availability + run: | + echo "=== 检查可用工具 ===" + echo "Git 版本:" + git --version + echo "Docker 版本:" + docker --version || echo "Docker 未安装" + echo "Go 版本:" + go version || echo "Go 未安装" + echo "Node.js 版本:" + node --version || echo "Node.js 未安装" + echo "Python 版本:" + python3 --version || echo "Python3 未安装" + echo "=== 网络连通性测试 ===" + ping -c 2 gitea.tailnet-68f9.ts.net || echo "无法 ping Gitea" + curl -s -o /dev/null -w "Gitea HTTP 状态: %{http_code}\n" https://gitea.tailnet-68f9.ts.net || echo "无法访问 Gitea HTTPS" + + # 任务2: 构建一个示例 Go 应用 + build-go-app: + runs-on: ubuntu + needs: build-info + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: '1.21' + + - name: Create Sample Go App + run: | + mkdir -p ./sample-app + cat > ./sample-app/main.go << 'EOF' + package main + + import ( + "fmt" + "net/http" + "os" + "time" + ) + + func main() { + port := os.Getenv("PORT") + if port == "" { + port = "8080" + } + + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello from DSW Runner! Time: %s\n", time.Now().Format(time.RFC3339)) + }) + + http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + fmt.Fprintln(w, "OK") + }) + + fmt.Printf("Server starting on port %s...\n", port) + if err := http.ListenAndServe(":"+port, nil); err != nil { + fmt.Printf("Server error: %v\n", err) + } + } + EOF + + cat > ./sample-app/go.mod << 'EOF' + module sample-app + + go 1.21 + EOF + + - name: Build Go App + run: | + cd ./sample-app + echo "开始构建 Go 应用..." + go build -v -o app main.go + echo "构建完成!" + ls -lh app + file app + + - name: Test Binary + run: | + cd ./sample-app + echo "测试二进制文件..." + ./app & + APP_PID=$! + sleep 2 + curl -s http://localhost:8080/ || echo "服务测试失败" + kill $APP_PID || true + echo "测试完成" + + - name: Upload Build Artifact + uses: actions/upload-artifact@v4 + with: + name: go-app-binary + path: ./sample-app/app + retention-days: 7 + + # 任务3: Docker 镜像构建(如果 Docker 可用) + build-docker: + runs-on: ubuntu + needs: build-go-app + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download Build Artifact + uses: actions/download-artifact@v4 + with: + name: go-app-binary + path: ./sample-app/ + + - name: Make Binary Executable + run: chmod +x ./sample-app/app + + - name: Create Dockerfile + run: | + cat > ./sample-app/Dockerfile << 'EOF' + FROM alpine:latest + + RUN apk add --no-cache ca-certificates + + WORKDIR /app + COPY app /app/ + + EXPOSE 8080 + + ENV PORT=8080 + + CMD ["./app"] + EOF + + - name: Build Docker Image + run: | + if command -v docker &> /dev/null; then + echo "Docker 可用,开始构建镜像..." + cd ./sample-app + docker build -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} . + docker tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + echo "镜像构建完成!" + docker images | grep ${{ env.IMAGE_NAME }} + else + echo "Docker 不可用,跳过镜像构建" + fi + + - name: Test Docker Container + run: | + if command -v docker &> /dev/null; then + echo "测试 Docker 容器..." + docker run -d --name test-app -p 8081:8080 ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + sleep 3 + curl -s http://localhost:8081/ || echo "容器测试失败" + docker stop test-app + docker rm test-app + echo "容器测试完成" + fi + + - name: Push Docker Image (if credentials available) + run: | + if command -v docker &> /dev/null; then + echo "尝试推送镜像到仓库..." + echo "注意: 需要配置 Docker 登录凭证" + # docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} + # docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + fi + + # 任务4: 清理和报告 + cleanup-and-report: + runs-on: ubuntu + needs: [build-info, build-go-app, build-docker] + if: always() + steps: + - name: Generate Report + run: | + echo "=== 构建报告 ===" + echo "工作流运行时间: ${{ github.run_duration }}" + echo "触发事件: ${{ github.event_name }}" + echo "提交 SHA: ${{ github.sha }}" + echo "分支: ${{ github.ref }}" + echo "=== 任务状态 ===" + echo "build-info: ${{ needs.build-info.result }}" + echo "build-go-app: ${{ needs.build-go-app.result }}" + echo "build-docker: ${{ needs.build-docker.result }}" + + - name: Cleanup Docker + run: | + if command -v docker &> /dev/null; then + echo "清理 Docker 资源..." + docker system prune -f || true + echo "清理完成" + fi diff --git a/.gitea/workflows/test-runner.yml b/.gitea/workflows/test-runner.yml deleted file mode 100644 index 4860985..0000000 --- a/.gitea/workflows/test-runner.yml +++ /dev/null @@ -1,37 +0,0 @@ -name: Test DSW Runner - -on: - push: - branches: [main] - workflow_dispatch: - -jobs: - test-runner: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Test Runner Environment - run: | - echo "=== Runner Test Started ===" - echo "Runner hostname: $(hostname)" - echo "Runner OS: $(uname -a)" - echo "Current directory: $(pwd)" - echo "User: $(whoami)" - echo "Date: $(date)" - echo "=== Environment Variables ===" - env | grep -E '^(RUNNER|GITHUB|CI)' || echo "No CI env vars found" - echo "=== Runner Test Completed ===" - - - name: Check Docker availability - run: | - echo "Checking Docker..." - docker --version || echo "Docker not available" - docker ps || echo "Cannot list containers" - - - name: Test network connectivity - run: | - echo "Testing network..." - ping -c 2 gitea.tailnet-68f9.ts.net || echo "Cannot ping Gitea" - curl -s -o /dev/null -w "%{http_code}" https://gitea.tailnet-68f9.ts.net || echo "Cannot reach Gitea HTTPS"