Як створити GitHub Action Workflow для CI/CD пайплайну в Kubernetes з Terraform

Тепер, коли ми налаштували обліковий запис служби та створили ролі Kubernetes, ми можемо розмістити їх на машині для розробки за шляхом ‘.kube/config’.

Спробуємо цю конфігурацію на машині для розробки.

kubectl get all -n prod-example-dot-com

Команда повинна працювати без проблем, що вказує на те, що публічний домен, налаштований в цій статті, та токен, згенерований в цій статті, працюють правильно.

Цей крок необхідний перед тим, як деплоїти ці облікові дані до GitHub Actions, щоб переконатися, що все працює коректно.

GitHub має власне сховище секретів, розташоване в налаштуваннях репозиторію -> Секрети та змінні -> Дії -> Секрети.

Давайте додамо контекст Kubernetes під змінною KUBE_CONF у форматі Base64.

cd .kube  
cat config | base64

Додатково нам потрібно додати ще 3 секрети:

  • REGISTRY_URL
  • REGISTRY_USERNAME
  • REGISTRY_PASSWORD

Ці параметри необхідні для налаштування власного реєстру артефактів, створеного в цій статті.

Тепер ми готові додати CI/CD пайплайн для деплойменту застосунку.

У попередній статті ми створили terraform скрипти і вже закомітили їх у репозиторій.

Давайте додамо файл ‘.github/workflows/deploy-main.yaml’

name: CI/CD Pipeline  

on:  
 push:  
 branches:  
 - main # Trigger workflow on pushes to the main branch  

jobs:  
 build-and-push:  
 runs-on: ubuntu-latest  

 steps:  
 - name: Checkout repository  
 uses: actions/checkout@v3  

 - name: Set up Docker  
 uses: docker/setup-buildx-action@v2  

 - name: Log in to Custom Registry  
 uses: docker/login-action@v2  
 with:  
 username: ${{ secrets.REGISTRY_USERNAME }}  
 password: ${{ secrets.REGISTRY_PASSWORD }}  
 registry: ${{ secrets.REGISTRY_URL }}  

 - name: Build the project  
 run: make  

 - name: Push the Docker image  
 run: make push  
 deploy:  
 needs: build-and-push  
 runs-on: ubuntu-latest  

 steps:  
 # Checkout the repository  
 - name: Checkout Code  
 uses: actions/checkout@v3  

 # Install Terraform  
 - name: Set up Terraform  
 uses: hashicorp/setup-terraform@v3  
 with:  
 terraform_version: 1.1.7 # Specify your Terraform version  

 # Authenticate with Kubernetes (via kubeconfig, GKE, or other means)  
 - name: Set up Terraform credentials  
 run: |  
 mkdir -p ~/.kube  
 echo "${{ secrets.KUBE_CONFIG }}" | base64 --decode > ~/.kube/config  

 - name: Navigate to Terraform Directory  
 working-directory: ./infra  
 run: echo "Navigated to infra folder"  

 # Initialize Terraform  
 - name: Terraform Init  
 working-directory: ./infra  
 run: terraform init  

 # Plan the Terraform deployment  
 - name: Terraform Plan  
 working-directory: ./infra  
 run: terraform plan  
 env:  
 TF_VAR_registry_url: ${{ secrets.REGISTRY_URL }}  
 TF_VAR_registry_username: ${{ secrets.REGISTRY_USERNAME }}  
 TF_VAR_registry_password: ${{ secrets.REGISTRY_PASSWORD }}  

 # Apply Terraform configuration  
 - name: Terraform Apply  
 working-directory: ./infra  
 run: terraform apply -auto-approve  
 env:  
 TF_VAR_registry_url: ${{ secrets.REGISTRY_URL }}  
 TF_VAR_registry_username: ${{ secrets.REGISTRY_USERNAME }}  
 TF_VAR_registry_password: ${{ secrets.REGISTRY_PASSWORD }}

У цьому пайплайні є два завдання:

  • build-and-push
  • deploy

Перше завдання призначене для створення контейнера за допомогою стандартної команди ‘make’ та завантаження його до віддаленого реєстру через команду ‘make push’.

Цей підхід можна використовувати для будь-якого контейнеризованого застосунку.
Друге завдання призначене для застосування terraform скриптів, які автоматично перезапускають деплоймент незалежно від версії образу.

Отже, кожен коміт або pull-запит до репозиторію створюватиме окремий застосунок і деплоїтиме його в Kubernetes.

Все готово.

Перекладено з: How to Create GitHub Action Workflow CI/CD pipeline for Kubernetes with Terraform

Leave a Reply

Your email address will not be published. Required fields are marked *