You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Actions首次向Kubernetes部署资源的实现方案咨询

解决方案

实现逻辑

先通过kubectl命令查询目标deployment是否存在,将查询结果存入步骤输出变量,后续步骤通过该变量的状态判断执行路径:

  • 部署不存在:先apply完整的资源清单完成首次部署
  • 部署已存在:直接执行原有镜像更新逻辑

调整后的完整工作流配置

# 先添加部署存在性校验步骤
- name: Check if deployment exists
  id: check_deploy
  uses: myrotvorets/kubectl-action@2.0.0
  with:
    config: ${{ secrets.KUBE_CONFIG_DATA }}
    version: latest
    args: get deployment app-deploy --ignore-not-found=true -o name

# 仅当部署不存在时执行首次资源创建
- name: First time apply manifest
  if: steps.check_deploy.outputs.stdout == ''
  uses: myrotvorets/kubectl-action@2.0.0
  with:
    config: ${{ secrets.KUBE_CONFIG_DATA }}
    version: latest
    # 替换为你仓库中实际存放的K8S资源清单路径
    args: apply -f ./k8s-manifests/

# 仅当部署已存在时执行镜像更新
- name: Update deployment image
  if: steps.check_deploy.outputs.stdout != ''
  uses: myrotvorets/kubectl-action@2.0.0
  with:
    config: ${{ secrets.KUBE_CONFIG_DATA }}
    version: latest
    args: set image --record deployment/app-deploy app-deploy=APITEST/app:${{ github.sha }}

# 原有验证步骤保留,首次部署/更新都会执行校验
- name: Verify deployment
  uses: myrotvorets/kubectl-action@2.0.0
  with:
    config: ${{ secrets.KUBE_CONFIG_DATA }}
    version: latest
    args: rollout status deployment/app-deploy

注意事项

  • 你需要提前将应用对应的完整K8S资源清单(Deployment、Service、Ingress等)提交到代码仓库对应目录下
  • 资源清单中的镜像字段可填写任意通用值(比如APITEST/app:latest),首次部署完成后镜像会自动更新为本次提交对应的${{ github.sha }}版本
  • 如果需要一次性 apply 多个资源文件,直接指定目录路径即可,kubectl会自动遍历目录下所有符合要求的yaml文件

内容的提问来源于stack exchange,提问作者safernandez666

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 07:12:02