跳过 kubernetes 服务创建,如果它已经存在 github 操作
Skipping kubernetes service creation if it already exists with github actions
我将以下 github 操作作业设置为在 EKS 上自动部署“nginx”应用程序并在推送时创建“nginx-service”服务。
我正在尝试在服务已存在时配置跳过服务创建步骤。
我的工作:
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
我尝试参考上一步(get_Service_list)的输出,没有成功。
谢谢
如果您想根据上一步的输出跳过一个步骤,请尝试以下操作:
第 1 步 - 确定要使用的输出的名称
如果你想访问ConsenSys/kubernetes-action
的输出,我们首先需要确定输出的名称是什么。值得庆幸的是,ConsenSys 通过 Action:
的 YAML 定义记录了这个输出
outputs:
result:
description: "Output of the kubectl command run"
要访问步骤的输出,GitHub 操作支持以下表达式:${{ steps.STEP_ID.outputs.OUTPUT_NAME }}
由于我们知道您要使用的步骤的 ID,并且 ConsenSys 记录了此操作的输出,因此我们知道最终表达式如下:${{ steps.get_service_list.outputs.result }}
第 2 步 - 确定适当的 'if' 语句
从第 1 步,我们能够确定 get_service_list
的输出是 kubectl 命令的输出。这意味着人们必须对 kubectl 有一点了解(在本地进行试验可以帮助解决这个问题)。由于您传递的是 get services/nginx-service -o name
,我假设您正在检查名为 services/nginx-service
的项目是否存在。如果存在,kubectl get services/nginx-service -o name
会输出services/nginx-service
。如果它不存在,kubectl 将 return 报错。换句话说,我们可以说如果输出不等于“services/nginx-service”,运行名为“Create ELB service”的步骤.
第 3 步 - 将它们放在一起
以上两步给了我们:
get_service_list
步骤输出的正确名称
- 我们要用于名为“创建 ELB 服务”的步骤的条件
将这些信息放在一起,“创建 ELB 服务”步骤可以采用以下形式:
- name: Create ELB service
if: steps.get_service_list.outputs.result != 'services/nginx-service'
uses: Consensys/kubernetes-action@master
env:
KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
with:
args: create -f nginx_loadbalancer.yaml
note GitHub Actions 自动假定条件 if
关键字的值是一个表达式,因此您不必将表达式括在${{ }}
.
有帮助Links/Notes
我将以下 github 操作作业设置为在 EKS 上自动部署“nginx”应用程序并在推送时创建“nginx-service”服务。
我正在尝试在服务已存在时配置跳过服务创建步骤。
我的工作:
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
我尝试参考上一步(get_Service_list)的输出,没有成功。
谢谢
如果您想根据上一步的输出跳过一个步骤,请尝试以下操作:
第 1 步 - 确定要使用的输出的名称
如果你想访问ConsenSys/kubernetes-action
的输出,我们首先需要确定输出的名称是什么。值得庆幸的是,ConsenSys 通过 Action:
outputs:
result:
description: "Output of the kubectl command run"
要访问步骤的输出,GitHub 操作支持以下表达式:${{ steps.STEP_ID.outputs.OUTPUT_NAME }}
由于我们知道您要使用的步骤的 ID,并且 ConsenSys 记录了此操作的输出,因此我们知道最终表达式如下:${{ steps.get_service_list.outputs.result }}
第 2 步 - 确定适当的 'if' 语句
从第 1 步,我们能够确定 get_service_list
的输出是 kubectl 命令的输出。这意味着人们必须对 kubectl 有一点了解(在本地进行试验可以帮助解决这个问题)。由于您传递的是 get services/nginx-service -o name
,我假设您正在检查名为 services/nginx-service
的项目是否存在。如果存在,kubectl get services/nginx-service -o name
会输出services/nginx-service
。如果它不存在,kubectl 将 return 报错。换句话说,我们可以说如果输出不等于“services/nginx-service”,运行名为“Create ELB service”的步骤.
第 3 步 - 将它们放在一起
以上两步给了我们:
get_service_list
步骤输出的正确名称- 我们要用于名为“创建 ELB 服务”的步骤的条件
将这些信息放在一起,“创建 ELB 服务”步骤可以采用以下形式:
- name: Create ELB service
if: steps.get_service_list.outputs.result != 'services/nginx-service'
uses: Consensys/kubernetes-action@master
env:
KUBE_CONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }}
with:
args: create -f nginx_loadbalancer.yaml
note GitHub Actions 自动假定条件 if
关键字的值是一个表达式,因此您不必将表达式括在${{ }}
.