#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:
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 ...