GitHub Actions를 사용하여AKS(Azure Kubernetes Service)에 컨테이너 빌드, 테스트 및 배포
GitHub Actions를 사용하면 자동화된 소프트웨어 개발 수명 주기 워크플로를 유연성 있게 빌드할 수 있습니다. 여러 Kubernetes 작업을 사용하여 GitHub Actions를 통해 ACR(Azure Container Registry)에서 AKS(Azure Kubernetes Service)로 컨테이너에 배포할 수 있습니다.
필수 조건
- 활성 구독이 있는 Azure 계정. 계정이 없으면 무료 계정을 만듭니다.
- GitHub 계정. 없는 경우 평가판에 등록하세요.
- GitHub Actions을 사용하는 경우 Azure와 GitHub 리포지토리 간의 통합을 구성해야 합니다. 통합을 구성하려면 GitHub Actions를 사용하여 Azure에 연결을 참조하세요.
- ACR이 연결된 기존 AKS 클러스터입니다. 없는 경우에는 AKS에서 ACR로 인증을 참조하세요.
AKS에 대한 GitHub Actions
GiHub Actions를 사용하면 GitHub 내에서 소프트웨어 개발 워크플로를 자동화할 수 있습니다. 자세한 내용은 Azure용 GitHub Actions을 참조하세요.
다음 표에는 AKS에 사용 가능한 작업이 나열되어 있습니다.
이름 | 설명 | 기타 세부 정보 |
---|---|---|
azure/aks-set-context |
kubectl 명령을 사용하거나 실행하려면 다른 작업에 대한 대상 AKS 클러스터 컨텍스트를 설정합니다. | azure/aks-set-context |
azure/k8s-set-context |
kubectl 명령을 사용하거나 실행하려면 다른 작업에 대한 대상 Kubernetes 클러스터 컨텍스트를 설정합니다. | azure/k8s-set-context |
azure/k8s-bake |
Helm, kustomize 또는 kompose를 사용하여 배포에 사용할 매니페스트 파일을 굽습니다. | azure/k8s-bake |
azure/k8s-create-secret |
Kubernetes 클러스터에서 일반 비밀 또는 Docker 레지스트리 비밀을 작성합니다. | azure/k8s-create-secret |
azure/k8s-deploy |
Kubernetes 클러스터에 매니페스트를 배포합니다. | azure/k8s-deploy |
azure/k8s-lint |
매니페스트 파일의 유효성을 검사/린트합니다. | azure/k8s-lint |
azure/setup-helm |
실행기에 특정 버전의 Helm 이진 파일을 설치합니다. | azure/setup-helm |
azure/setup-kubectl |
실행기에 특정 버전의 kubectl을 설치합니다. | azure/setup-kubectl |
azure/k8s-artifact-substitute |
컨테이너 이미지의 태그 또는 다이제스트를 업데이트합니다. | azure/k8s-artifact-substitute |
azure/aks-create-action |
Terraform을 사용하여 AKS 클러스터를 만듭니다. | azure/aks-create-action |
azure/aks-github-runner |
GitHub Actions에 대한 자체 호스팅 에이전트를 설정합니다. | azure/aks-github-runner |
azure/acr-build |
ACR을 사용하여 컨테이너를 빌드합니다. | azure/acr-build |
AKS와 함께 GitHub Actions 사용
예를 들어 GitHub 리포지토리에 변경 내용이 푸시될 때마다 GitHub Actions을 사용하여 AKS 클러스터에 애플리케이션을 배포할 수 있습니다. 이 예에서는 Azure Vote 애플리케이션을 사용합니다.
참고 항목
이 예에서는 ACR 및 AKS 클러스터 인증에 서비스 주체를 사용합니다. 또는 OIDC(Open ID Connect)를 구성하고 OIDC를 사용하도록 azure/login
작업을 업데이트할 수 있습니다. 자세한 내용은 OpenID Connect 인증을 사용하여 Azure 로그인 설정을 참조하세요.
리포지토리 포크 및 업데이트
Azure Vote 리포지토리로 이동하여 포크를 선택합니다.
azure-vote-front
이미지에 ACR을 사용하려면azure-vote-all-in-one-redis.yaml
을 업데이트합니다.<registryName>
을 레지스트리 이름으로 바꿉니다.... containers: - name: azure-vote-front image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1 ...
업데이트된
azure-vote-all-in-one-redis.yaml
을 리포지토리에 커밋합니다.
비밀 만들기
az ad sp create-for-rbac
명령을 사용하여Contributor
역할로 리소스 그룹에 액세스할 서비스 주체를 만듭니다.<SUBSCRIPTION_ID>
를 Azure 계정의 구독 ID로 바꾸고,<RESOURCE_GROUP>
을 ACR이 포함된 리소스 그룹의 이름으로 바꿉니다.az ad sp create-for-rbac \ --name "ghActionAzureVote" \ --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \ --role Contributor \ --json-auth
출력은 다음 예제 출력과 비슷하게 됩니다.
{ "clientId": <clientId>, "clientSecret": <clientSecret>, "subscriptionId": <subscriptionId>, "tenantId": <tenantId>, ... }
GitHub 리포지토리 설정으로 이동하여 보안>비밀 및 변수>작업을 선택합니다.
각 비밀에 대해 새 리포지토리 비밀를 선택하고 비밀의 이름과 값을 입력합니다.
비밀 이름 비밀 값 AZURE_CREDENTIALS az ad sp create-for-rbac
명령의 전체 JSON 출력입니다.service_principal <clientId>
의 값service_principal_password <clientSecret>
의 값구독 <subscriptionId>
의 값tenant <tenantId>
의 값사용된 레지스트리 이름입니다. 리포지토리 azuredocs resource_group 리소스 그룹의 이름입니다. cluster_name 클러스터의 이름입니다.
비밀 만들기에 대한 자세한 내용은 암호화된 비밀를 참조하세요.
작업 파일 만들기
리포지토리에서
.github/workflows/main.yml
을 만들고 다음 콘텐츠를 붙여넣습니다.name: build_deploy_aks on: push: paths: - "azure-vote/**" jobs: build: runs-on: ubuntu-latest steps: - name: Checkout source code uses: actions/checkout@v3 - name: ACR build id: build-push-acr uses: azure/acr-build@v1 with: service_principal: ${{ secrets.service_principal }} service_principal_password: ${{ secrets.service_principal_password }} tenant: ${{ secrets.tenant }} registry: ${{ secrets.registry }} repository: ${{ secrets.repository }} image: azure-vote-front folder: azure-vote branch: master tag: ${{ github.sha }} - name: Azure login id: login uses: azure/login@v1.4.3 with: creds: ${{ secrets.AZURE_CREDENTIALS }} - name: Set AKS context id: set-context uses: azure/aks-set-context@v3 with: resource-group: '${{ secrets.resource_group }}' cluster-name: '${{ secrets.cluster_name }}' - name: Setup kubectl id: install-kubectl uses: azure/setup-kubectl@v3 - name: Deploy to AKS id: deploy-aks uses: Azure/k8s-deploy@v4 with: namespace: 'default' manifests: | azure-vote-all-in-one-redis.yaml images: '${{ secrets.registry }}.azurecr.io/${{ secrets.repository }}/azure-vote-front:${{ github.sha }}' pull-images: false
on
섹션에는 작업을 트리거하는 이벤트가 포함됩니다. 파일 예에서는 변경 내용이azure-vote
디렉터리에 푸시될 때 작업이 트리거됩니다.steps
섹션에는 각각의 고유한 작업이 포함되어 있습니다.- Checkout 소스 코드는 GitHub Actions Checkout Action을 사용하여 리포지토리를 복제합니다.
- ACR 빌드는 Azure Container Registry 빌드 작업을 사용하여 이미지를 빌드하고 레지스트리에 업로드합니다.
- Azure 로그인은 Azure 로그인 작업을 사용하여 Azure 계정에 로그인합니다.
- AKS 컨텍스트 설정은 Azure AKS 컨텍스트 설정 작업을 사용하여 AKS 클러스터에 대한 컨텍스트를 설정합니다.
- Setup kubectl은 Azure AKS Setup Kubectl Action을 사용하여 실행기에 kubectl을 설치합니다.
- AKS에 배포는 Azure Kubernetes 배포 작업을 사용하여 애플리케이션을 Kubernetes 클러스터에 배포합니다.
.github/workflows/main.yml
파일을 리포지토리에 커밋합니다.작업이 작동하는지 확인하려면 다음 콘텐츠로
azure-vote/azure-vote/config_file.cfg
를 업데이트합니다.# UI Configurations TITLE = 'Azure Voting App' VOTE1VALUE = 'Fish' VOTE2VALUE = 'Dogs' SHOWHOST = 'false'
업데이트된
azure-vote/azure-vote/config_file.cfg
을 리포지토리에 커밋합니다.리포지토리에서 작업을 선택하고 워크플로가 실행 중인지 확인합니다. 그런 다음 워크플로에 녹색 확인 표시가 있고 업데이트된 애플리케이션이 클러스터에 배포되었는지 확인합니다.
다음 단계
AKS에 대한 다음 스타터 워크플로를 검토합니다. 자세한 내용은 시작 워크플로 사용을 참조하세요.
Azure Kubernetes Service