fix action for k8s deploy3
Some checks failed
Some checks failed
This commit is contained in:
parent
da6c1874a4
commit
e54ed965de
@ -104,12 +104,40 @@ 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: |
|
||||||
cat > Dockerfile << 'EOF'
|
cat > Dockerfile << 'EOF'
|
||||||
@ -154,6 +182,31 @@ jobs:
|
|||||||
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: |
|
||||||
|
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
|
||||||
|
|
||||||
|
- name: 部署到 Kubernetes
|
||||||
run: |
|
run: |
|
||||||
echo "开始部署到 Kubernetes..."
|
echo "开始部署到 Kubernetes..."
|
||||||
|
|
||||||
# 检查是否配置了 Kubernetes 部署
|
# 验证 kubectl 连接
|
||||||
if [[ -n "${{ secrets.KUBE_CONFIG }}" ]]; then
|
echo "验证 Kubernetes 集群连接..."
|
||||||
# 检查并安装 kubectl (如果需要)
|
if kubectl cluster-info --short; then
|
||||||
if ! command -v kubectl &> /dev/null; then
|
echo "Kubernetes 集群连接成功"
|
||||||
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: 无法连接到 Kubernetes 集群"
|
||||||
|
echo "请检查:"
|
||||||
|
echo " 1. KUBE_CONFIG secret 是否正确"
|
||||||
|
echo " 2. 集群是否可访问"
|
||||||
|
echo " 3. 证书是否有效"
|
||||||
|
exit 1
|
||||||
fi
|
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 部署完成"
|
Loading…
x
Reference in New Issue
Block a user