diff --git a/.gitea/workflows/build-ubuntu.yaml b/.gitea/workflows/build-ubuntu.yaml index a38098f..19a3139 100644 --- a/.gitea/workflows/build-ubuntu.yaml +++ b/.gitea/workflows/build-ubuntu.yaml @@ -104,11 +104,39 @@ jobs: echo "停止 NGINX..." sudo /usr/local/nginx/sbin/nginx -s quit - - name: 准备 Docker 构建上下文 + - name: 准备构建产物 run: | echo "复制 nginx 文件到构建上下文..." sudo cp -r /usr/local/nginx ./nginx-install sudo chown -R $(whoami):$(whoami) ./nginx-install + + # 打包构建产物供后续步骤使用 + tar -czf nginx-install.tar.gz ./nginx-install + + - name: 上传构建产物 + uses: actions/upload-artifact@v3 + with: + name: nginx-install + path: nginx-install.tar.gz + retention-days: 1 + + build-docker-image: + needs: build-nginx + runs-on: ubuntu-22.04 + + steps: + - name: 检出代码 + uses: actions/checkout@v4 + + - name: 下载构建产物 + uses: actions/download-artifact@v3 + with: + name: nginx-install + + - name: 准备构建上下文 + run: | + tar -xzf nginx-install.tar.gz + ls -la - name: 创建 Dockerfile run: | @@ -153,7 +181,32 @@ jobs: run: | echo "构建 Docker 镜像..." docker build -t nginx-local:latest . + + - name: 保存 Docker 镜像 + run: | + docker save nginx-local:latest > nginx-image.tar + + - name: 上传 Docker 镜像 + uses: actions/upload-artifact@v3 + with: + name: nginx-docker-image + path: nginx-image.tar + retention-days: 1 + push-to-harbor: + needs: build-docker-image + runs-on: ubuntu-22.04 + + steps: + - name: 下载 Docker 镜像 + uses: actions/download-artifact@v3 + with: + name: nginx-docker-image + + - name: 加载 Docker 镜像 + run: | + docker load < nginx-image.tar + - name: 登录到 Harbor run: | echo "登录到 Harbor 仓库..." @@ -174,75 +227,61 @@ jobs: docker rmi ${{ secrets.HARBOR_REGISTRY }}/test/nginx:${{ github.sha }} || true docker rmi ${{ secrets.HARBOR_REGISTRY }}/test/nginx:latest || true - - name: 部署到 Kubernetes (可选) - if: github.ref == 'refs/heads/main' && github.event_name == 'push' + deploy-to-kubernetes: + needs: push-to-harbor + runs-on: ubuntu-22.04 + if: github.ref == 'refs/heads/main' && github.event_name == 'push' + + steps: + - name: 检出代码 + uses: actions/checkout@v4 + + - name: 安装 kubectl + uses: azure/setup-kubectl@v3 + with: + version: 'latest' + + - name: 创建 kubeconfig run: | - echo "开始部署到 Kubernetes..." - - # 检查是否配置了 Kubernetes 部署 - if [[ -n "${{ secrets.KUBE_CONFIG }}" ]]; then - # 检查并安装 kubectl (如果需要) - if ! command -v kubectl &> /dev/null; then - echo "kubectl 未安装,开始安装最新版本..." - KUBECTL_VERSION=$(curl -L -s https://dl.k8s.io/release/stable.txt) - echo "下载 kubectl 版本: $KUBECTL_VERSION" - - if curl -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl"; then - chmod +x kubectl - sudo mv kubectl /usr/local/bin/ - echo "kubectl 安装完成,版本: $(kubectl version --client --short 2>/dev/null || kubectl version --client)" - else - echo "kubectl 下载失败,尝试使用包管理器安装..." - sudo apt-get update && sudo apt-get install -y kubectl || (echo "kubectl 安装失败" && exit 1) - fi - else - echo "kubectl 已存在,当前版本: $(kubectl version --client --short 2>/dev/null || kubectl version --client)" - # 可选:检查版本是否过旧,如果需要可以升级 - # CURRENT_VERSION=$(kubectl version --client -o json 2>/dev/null | jq -r '.clientVersion.gitVersion' || echo "unknown") - # echo "当前 kubectl 版本: $CURRENT_VERSION" - fi - - # 配置 kubectl - echo "配置 kubectl 连接信息..." - mkdir -p ~/.kube - if echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > ~/.kube/config 2>/dev/null; then - chmod 600 ~/.kube/config - echo "kubectl 配置文件创建成功" - else - echo "ERROR: kubectl 配置文件创建失败,请检查 KUBE_CONFIG secret 是否正确" - echo "KUBE_CONFIG 应该是 base64 编码的 kubeconfig 文件内容" - exit 1 - fi - - # 验证 kubectl 连接 - echo "验证 Kubernetes 集群连接..." - if kubectl cluster-info --short; then - echo "Kubernetes 集群连接成功" - else - echo "ERROR: 无法连接到 Kubernetes 集群" - echo "请检查:" - echo " 1. KUBE_CONFIG secret 是否正确" - echo " 2. 集群是否可访问" - echo " 3. 证书是否有效" - exit 1 - fi - - # 设置环境变量 - export HARBOR_REGISTRY="${{ secrets.HARBOR_REGISTRY }}" - export HARBOR_USERNAME="${{ secrets.HARBOR_USERNAME }}" - export HARBOR_PASSWORD="${{ secrets.HARBOR_PASSWORD }}" - export NGINX_IMAGE_TAG="${{ github.sha }}" - export NAMESPACE="${{ secrets.K8S_NAMESPACE || 'default' }}" - - # 进入 k8s 目录 - cd k8s - - # 运行部署脚本 - chmod +x deploy.sh - ./deploy.sh - - echo "Kubernetes 部署完成" + mkdir -p ~/.kube + if echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > ~/.kube/config 2>/dev/null; then + chmod 600 ~/.kube/config + echo "kubectl 配置文件创建成功" else - echo "跳过 Kubernetes 部署 - 未配置 KUBE_CONFIG" + echo "ERROR: kubectl 配置文件创建失败,请检查 KUBE_CONFIG secret 是否正确" + echo "KUBE_CONFIG 应该是 base64 编码的 kubeconfig 文件内容" + exit 1 fi + - name: 部署到 Kubernetes + run: | + echo "开始部署到 Kubernetes..." + + # 验证 kubectl 连接 + echo "验证 Kubernetes 集群连接..." + if kubectl cluster-info --short; then + echo "Kubernetes 集群连接成功" + else + echo "ERROR: 无法连接到 Kubernetes 集群" + echo "请检查:" + echo " 1. KUBE_CONFIG secret 是否正确" + echo " 2. 集群是否可访问" + echo " 3. 证书是否有效" + exit 1 + fi + + # 设置环境变量 + export HARBOR_REGISTRY="${{ secrets.HARBOR_REGISTRY }}" + export HARBOR_USERNAME="${{ secrets.HARBOR_USERNAME }}" + export HARBOR_PASSWORD="${{ secrets.HARBOR_PASSWORD }}" + export NGINX_IMAGE_TAG="${{ github.sha }}" + export NAMESPACE="${{ secrets.K8S_NAMESPACE || 'default' }}" + + # 进入 k8s 目录 + cd k8s + + # 运行部署脚本 + chmod +x deploy.sh + ./deploy.sh + + echo "Kubernetes 部署完成" \ No newline at end of file