Пропуск создания службы kubernetes, если она уже существует с помощью действий github

#kubernetes #kubectl #github-actions #amazon-eks

#kubernetes #кубектл #github-действия #amazon-eks

Вопрос:

Я установил следующее задание действия github для автоматического развертывания приложения «nginx» на EKS и создания службы «nginx-service» на push.

Я пытаюсь настроить пропуск на этапе создания службы, когда служба уже существует.

Моя работа:

 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. Добро пожаловать! Один из пунктов, который помогает получить более качественные ответы (и вопросы), — это указать, что вы уже пробовали и с чем у вас возникли проблемы. Например, у вас возникли проблемы с форматированием условных обозначений, доступом к выводам предыдущего шага или чем-то еще? Каков фактический код, который вы пробовали, и каков был результат?

2. Если вы измените kubectl create kubectl apply его, он будет работать, даже если Служба уже существует (она может изменить свои параметры конфигурации). Будет ли это работать apply безоговорочно?

Ответ №1:

Если вы хотите пропустить шаг, основанный на результатах предыдущего шага, попробуйте выполнить следующее:

Шаг 1 — Определите имя выходного файла, который вы хотите использовать

Если вы хотите получить доступ к выходным ConsenSys/kubernetes-action данным, нам сначала нужно определить, каково имя выходных данных. К счастью, ConsenSys документирует этот вывод с помощью определения действия YAML:

./.action.yml

 outputs:
  result:
    description: "Output of the kubectl command run"
 

Чтобы получить доступ к выводам шага, действия GitHub поддерживают следующее выражение: ${{ steps.STEP_ID.outputs.OUTPUT_NAME }}

Поскольку мы знаем идентификатор шага, который вы хотите использовать, и ConsenSys документирует результат этого действия, мы знаем, что конечное выражение выглядит следующим образом: ${{ 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 вернет сообщение об ошибке. Другими словами, мы можем сказать, что если результат не равен «services / nginx-service», выполните шаг с именем «Создать службу 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 автоматически предполагают, что значение условного if ключевого слова является выражением, поэтому вам не нужно заключать выражение в ${{ }} .

Полезные ссылки/ Заметки

Комментарии:

1. Спасибо! Обновлено следующим образом: - name: Get services list with: args: get services args: get services - name: Create ELB service if: contains(steps.get_services_list.outputs.result, 'nginx-service') == false ...