如果kubernetes服务已存在,则跳过该服务的创建,并执行github操作

如果kubernetes服务已存在,则跳过该服务的创建,并执行github操作,kubernetes,kubectl,github-actions,amazon-eks,Kubernetes,Kubectl,Github Actions,Amazon Eks,我将下面的github操作作业设置为在EKS上自动部署“nginx”应用程序,并在推送上创建“nginx服务”服务 当服务已经存在时,我试图在服务创建步骤中配置跳过 我的工作: name: CD_EKS on: - push jobs: eks_nginx_deployment_service: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Configur

我将下面的github操作作业设置为在EKS上自动部署“nginx”应用程序,并在推送上创建“nginx服务”服务

当服务已经存在时,我试图在服务创建步骤中配置跳过

我的工作:

name: CD_EKS

on:
  - push

jobs:
  eks_nginx_deployment_service:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: eu-central-1

      - name: Trigger deploy
        uses: Consensys/kubernetes-action@master
        env:
          KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
        with:
          args: apply -f nginx_deployment.yaml

      - name: Get Service List
        id: get_service_list
        uses: Consensys/kubernetes-action@master
        env:
          KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
        with:
          args: get services/nginx-service -o name

      - name: Create ELB service
        if: <service doesn't exist> # <- that's my point
        uses: Consensys/kubernetes-action@master
        env:
          KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
        with:
          args: create -f nginx_loadbalancer.yaml
名称:CD_EKS
关于:
-推
工作:
eks_nginx_部署_服务:
运行于:ubuntu最新版本
步骤:
-用途:行动/checkout@v2
-名称:配置AWS凭据
用途:aws操作/配置aws-credentials@v1
与:
aws访问密钥id:${{secrets.aws_access_key_id}
aws秘密访问密钥:${secrets.aws_secret_access_key}
aws地区:eu-central-1
-名称:触发器部署
用途:康森斯/库伯内特斯-action@master
环境:
KUBE_CONFIG_DATA:${{secrets.KUBE_CONFIG_DATA}
与:
args:apply-f nginx_deployment.yaml
-名称:获取服务列表
id:获取服务列表
用途:康森斯/库伯内特斯-action@master
环境:
KUBE_CONFIG_DATA:${{secrets.KUBE_CONFIG_DATA}
与:
args:get services/nginx服务-o名称
-名称:创建ELB服务

如果:如果要根据上一步的输出跳过一步,请尝试以下操作:

步骤1-确定要使用的输出的名称 如果您想访问ConsenSys/kubernetes操作的输出,我们首先需要确定输出的名称。谢天谢地,ConsenSys通过YAML对动作的定义记录了这个输出:

输出:
结果:
描述:“kubectl命令运行的输出”
要访问步骤的输出,GitHub操作支持以下表达式:
${{steps.step\u ID.outputs.output\u NAME}

由于我们知道要使用的步骤的ID,并且ConsenSys记录了此操作的输出,因此我们知道最终表达式如下:
${{steps.get\u service\u list.outputs.result}

步骤2-确定适当的“如果”语句 从步骤1开始,我们能够确定
get\u service\u list
的输出是kubectl命令的输出。这意味着你必须对kubectl有一点了解(在本地进行实验可以有所帮助)。由于您正在传递
get services/nginx service-o name
,因此我假设您正在检查是否存在名为
services/nginx service
的项。如果存在,
kubectl get services/nginx service-o name
将输出
services/nginx service
。如果它不存在,kubectl将返回一个错误。换句话说,我们可以说,如果输出不等于“services/nginx service”,则运行名为“Create ELB service”的步骤

第3步-将所有内容放在一起 上述两个步骤为我们提供了:

  • get\u service\u列表的正确名称
  • 要用于名为“创建ELB服务”的步骤的条件
将这些信息放在一起,“创建ELB服务”步骤可以采用以下形式:

-名称:创建ELB服务
if:steps.get_service_list.outputs.result!='服务/nginx服务'
用途:康森斯/库伯内特斯-action@master
环境:
KUBE_CONFIG_DATA:${{secrets.KUBE_CONFIG_DATA}
与:
args:create-f nginx_loadbalancer.yaml
注意GitHub操作会自动假定如果
关键字是一个表达式,则条件的
的值是一个表达式,因此不必将表达式括在
${}

有用的链接/说明

欢迎!其中一项有助于获得更高质量的答案(和问题)的内容是包括您迄今为止尝试过的内容,以及您遇到的问题。例如,您是否在格式化条件、访问上一步的输出或完全其他方面遇到问题?您尝试的实际代码是什么?结果是什么?如果您将
kubectl create
更改为
kubectl apply
,即使服务已经存在,它也会工作(可能会更改其配置参数)。无条件地应用
是否有效?谢谢!更新如下:
-name:Get services list with:args:Get services args:Get services-name:Create ELB service if:contains(steps.Get\u services\u list.outputs.result,'nginx service')==false…