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
相关产品推荐
相关产品推荐

