fix action for k8s deploy3
Some checks failed
Build NGINX on Ubuntu / build-nginx (push) Failing after 4m18s
Build NGINX on Ubuntu / build-docker-image (push) Has been skipped
Build NGINX on Ubuntu / push-to-harbor (push) Has been skipped
Build NGINX on Ubuntu / deploy-to-kubernetes (push) Has been skipped

This commit is contained in:
huangzhiqiang 2025-06-09 11:13:09 +08:00
parent da6c1874a4
commit e54ed965de

View File

@ -104,11 +104,39 @@ jobs:
echo "停止 NGINX..." echo "停止 NGINX..."
sudo /usr/local/nginx/sbin/nginx -s quit sudo /usr/local/nginx/sbin/nginx -s quit
- name: 准备 Docker 构建上下文 - name: 准备构建产物
run: | run: |
echo "复制 nginx 文件到构建上下文..." echo "复制 nginx 文件到构建上下文..."
sudo cp -r /usr/local/nginx ./nginx-install sudo cp -r /usr/local/nginx ./nginx-install
sudo chown -R $(whoami):$(whoami) ./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 - name: 创建 Dockerfile
run: | run: |
@ -153,7 +181,32 @@ jobs:
run: | run: |
echo "构建 Docker 镜像..." echo "构建 Docker 镜像..."
docker build -t nginx-local:latest . 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 - name: 登录到 Harbor
run: | run: |
echo "登录到 Harbor 仓库..." echo "登录到 Harbor 仓库..."
@ -174,75 +227,61 @@ jobs:
docker rmi ${{ secrets.HARBOR_REGISTRY }}/test/nginx:${{ github.sha }} || true docker rmi ${{ secrets.HARBOR_REGISTRY }}/test/nginx:${{ github.sha }} || true
docker rmi ${{ secrets.HARBOR_REGISTRY }}/test/nginx:latest || true docker rmi ${{ secrets.HARBOR_REGISTRY }}/test/nginx:latest || true
- name: 部署到 Kubernetes (可选) deploy-to-kubernetes:
if: github.ref == 'refs/heads/main' && github.event_name == 'push' 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: | run: |
echo "开始部署到 Kubernetes..." mkdir -p ~/.kube
if echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > ~/.kube/config 2>/dev/null; then
# 检查是否配置了 Kubernetes 部署 chmod 600 ~/.kube/config
if [[ -n "${{ secrets.KUBE_CONFIG }}" ]]; then echo "kubectl 配置文件创建成功"
# 检查并安装 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 部署完成"
else else
echo "跳过 Kubernetes 部署 - 未配置 KUBE_CONFIG" echo "ERROR: kubectl 配置文件创建失败,请检查 KUBE_CONFIG secret 是否正确"
echo "KUBE_CONFIG 应该是 base64 编码的 kubeconfig 文件内容"
exit 1
fi 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 部署完成"