我设置了以下github操作作业,以自动部署一个"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
我试图引用前面的步骤(get_Service_list(输出,但没有成功。
谢谢
如果您想在前一步的输出基础上跳过一步,请尝试以下操作:
步骤1-确定要使用的输出的名称
如果你想访问ConsenSys/kubernetes-action
的输出,我们首先需要确定输出的名称。值得庆幸的是,ConsensSys通过Action:的YAML定义记录了这个输出
./。action.yml
outputs:
result:
description: "Output of the kubectl command run"
为了访问步骤的输出,GitHub Actions支持以下表达式:${{ steps.STEP_ID.outputs.OUTPUT_NAME }}
由于我们知道您要使用的步骤的ID,并且ConsensSys记录了该操作的输出,因此我们知道最终表达式如下:${{ steps.get_service_list.outputs.result }}
步骤2-确定适当的"如果"语句
从步骤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将返回一个错误。换句话说,我们可以说如果输出不等于"服务/nginx服务";,运行名为";创建ELB服务">。
第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
注意GitHub Actions会自动假设条件if
关键字的值是一个表达式,因此不必将该表达式括在${{ }}
中。
有用的链接/注释
- GitHub动作表达式中支持的运算符
- 关于上下文和表达式