파이프라인 구성 및 업데이트 푸시
이 문서에서는 Azure 개발자 CLI(azd
)를 사용하여 GitHub Actions 또는 Azure DevOps와 같은 CI/CD 파이프라인을 통해 템플릿 변경 내용을 푸시하는 방법을 알아봅니다. 이 예제에서는 Azure 템플릿에서 Node.js API 및 MongoDB와 React Web App을 사용하지만 이 문서에서 학습한 원칙을 Azure 개발자 CLI 템플릿에 적용할 수 있습니다.
참고 항목
이 azd pipeline config
명령은 여전히 베타 상태입니다. 기능 버전 관리 및 릴리스 전략 페이지에서 알파 및 베타 기능 지원에 대해 자세히 알아보세요.
필수 조건
azd
템플릿은 CI/CD를 설정하는 데 필요한 기본 GitHub Actions 및/또는 Azure DevOps 파이프라인 구성 파일을 azure-dev.yml
포함하거나 포함하지 않을 수 있습니다. 이 구성 파일은 Azure 리소스를 프로비전하고 코드를 주 분기에 배포합니다. 다음을 찾을 azure-dev.yml
수 있습니다.
- GitHub Actions의 경우:
.github/workflows
디렉터리에 있습니다. - Azure DevOps의 경우:
.azdo/pipelines
디렉터리에 있습니다.
구성 파일을 있는 그대로 사용하거나 필요에 맞게 수정할 수 있습니다.
참고 항목
를 호출azd pipeline config
하기 전에 템플릿에 파이프라인 정의(azure-dev.yaml
)가 있는지 확인합니다. azd
는 이 파일을 자동으로 만들지 않습니다.
아래 azd에 대한 파이프라인 정의 만들기를 참조하세요.
명령을 azd pipeline config
사용하여 다음 작업을 처리하는 CI/CD 파이프라인을 구성합니다.
- Azure 구독에서 앱에 대한 서비스 주체를 만들고 구성합니다. azd가
Owner
역할을 만들고 서비스 주체에 할당할 수 있도록 하려면 사용자에게 Azure 구독 내에서 역할 또는Contributor + User Access Administrator
역할이 있어야 합니다. - 워크플로를 통해 GitHub 또는 Azure DevOps 리포지토리를 만들고 구성하고 프로젝트 코드를 커밋합니다. 기존 리포지토리를 사용하도록 선택할 수도 있습니다.
- Azure와 리포지토리 간에 보안 연결을 만듭니다.
- 워크플로 파일을 체크 인할 때 GitHub 작업을 실행합니다.
이 프로세스를 보다 세부적으로 제어하거나 사용자에게 필요한 역할이 없는 경우 파이프라인을 수동으로 구성할 수 있습니다.
계속하려면 원하는 파이프라인 공급자를 선택합니다.
Azure에 배포하도록 GitHub 권한 부여
워크플로를 구성하려면 GitHub 작업에서 사용자를 대신하여 Azure에 배포할 서비스 주체에 권한을 부여해야 합니다. azd
는 서비스 주체 및 페더레이션 자격 증명을 만듭니다.
다음 명령을 실행하여 Azure 서비스 주체를 만들고 파이프라인을 구성합니다.
azd pipeline config
이 명령은 필요에 따라 GitHub 리포지토리를 만들고 코드를 새 리포지토리에 푸시합니다.
참고 항목
기본적으로
azd pipeline config
페더레이션된 자격 증명이라고 하는 OIDC(OpenID Connect)를 사용합니다. OIDC를 사용하지 않으려면azd pipeline config --auth-type client-credentials
를 실행합니다.Terraform에는 OIDC/페더레이션 자격 증명이 지원되지 않습니다 .
요청된 GitHub 정보를 제공합니다.
로컬 변경 내용을 커밋하고 푸시하여 새 GitHub Actions 실행을 시작하라는 메시지가 표시되면 지정
y
합니다.터미널 창에서 명령의 결과를 봅니다
azd pipeline config
. 이azd pipeline config
명령은 프로젝트의 GitHub 리포지토리 이름을 출력합니다.브라우저를 사용하여 프로젝트에 대한 GitHub 리포지토리를 엽니다.
작업을 선택하여 실행 중인 워크플로를 확인합니다 .
코드 변경 및 푸시
프로젝트의
/src/web/src/layout
디렉터리에서 을 엽니다header.tsx
.줄을
<Text variant="xLarge">ToDo</Text>
찾습니다.리터럴
ToDo
을 .로 변경합니다myTodo
.파일을 저장합니다.
변경 내용을 커밋합니다. 변경 내용을 커밋하면 GitHub 작업 파이프라인이 업데이트를 배포하기 시작합니다.
브라우저를 사용하여 프로젝트의 GitHub 리포지토리를 열어 다음을 모두 확인합니다.
- 커밋
- 설정 중인 GitHub Actions의 커밋입니다.
작업을 선택하여 워크플로에 반영된 테스트 업데이트를 확인합니다.
웹 프런트 엔드 URL을 방문하여 업데이트를 검사합니다.
azd
GitHub 작업으로
GitHub 작업으로 추가 azd
합니다. 이 작업은 설치 azd
됩니다. 이를 사용하려면 다음을 .github\workflows\azure-dev.yml
추가할 수 있습니다.
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Install azd
uses: Azure/setup-azd@v0.1.0
리소스 정리
이 문서에서 만든 Azure 리소스가 더 이상 필요하지 않은 경우 다음 명령을 실행합니다.
azd down
고급 기능
다음 섹션에 설명된 azd pipeline config
대로 특정 템플릿 시나리오 또는 요구 사항에 대한 명령을 확장할 수 있습니다.
추가 비밀 또는 변수
기본적으로 파이프라인에 azd
대한 변수 및 비밀을 설정합니다. 예를 들어 azd pipeline config
명령은 실행할 때마다 파이프라인 변수로 및 environment name
region
파이프라인 변수를 만듭니다subscription id
. 그런 다음 파이프라인 정의는 이러한 변수를 참조합니다.
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
파이프라인이 실행 azd
되면 변수 및 비밀에 매핑되는 환경에서 값을 가져옵니다. 템플릿에 따라 환경 변수를 사용하여 제어할 수 있는 설정이 있을 수 있습니다. 예를 들어 템플릿 인프라 내에서 Key Vault 리소스의 이름을 정의하도록 명명 KEY_VAULT_NAME
된 환경 변수를 설정할 수 있습니다. 이러한 경우 변수 및 비밀 목록은 템플릿에서 다음을 사용하여 azure.yaml
정의할 수 있습니다. 예를 들어 다음 azure.yaml
구성을 고려합니다.
pipeline:
variables:
- KEY_VAULT_NAME
- STORAGE_NAME
secrets:
- CONNECTION_STRING
이 구성을 azd
사용하면 환경에서 변수 또는 비밀에 비어 있지 않은 값이 있는지 확인합니다. azd
그런 다음, 구성의 키 이름을 변수 또는 비밀의 이름으로 사용하고 값에 대한 환경의 비 문자열 값을 사용하여 파이프라인에 대한 변수 또는 비밀을 만듭니다.
그런 다음 파이프라인 정의는 azure-dev.yaml
변수 또는 비밀을 참조할 수 있습니다.
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
KEY_VAULT_NAME: ${{ variables.KEY_VAULT_NAME }}
STORAGE_NAME: ${{ variables.STORAGE_NAME }}
CONNECTION_STRING: ${{ secrets.CONNECTION_STRING }}
참고 항목
azd가 파이프라인 값을 다시 설정하려면 비밀 또는 변수 azure.yaml
목록을 업데이트한 후 실행 azd pipeline config
해야 합니다.
인프라 매개 변수
다음 bicep 예제를 고려합니다.
@secure()
param BlobStorageConnection string
매개 변수 BlobStorageConnection
에 기본값 집합이 없으므로 azd
사용자에게 값을 입력하라는 메시지가 표시됩니다. 그러나 CI/CD 중에는 대화형 프롬프트가 없습니다. azd
는 실행할 azd pipeline config
때 매개 변수 값을 요청하고 파이프라인에 값을 저장한 다음 파이프라인이 실행되면 값을 다시 가져와야 합니다.
azd
는 파이프라인에 필요한 모든 매개 변수의 값을 자동으로 저장하고 설정하기 위해 호출 AZD_INITIAL_ENVIRONMENT_CONFIG
된 파이프라인 비밀을 사용합니다. 파이프라인에서 이 비밀을 참조하기만 하면 됩니다.
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
파이프라인이 실행 azd
되면 비밀에서 매개 변수 값을 가져와 대화형 프롬프트가 필요하지 않습니다.
참고 항목
새 매개 변수를 추가하는 경우 다시 실행 azd pipeline config
해야 합니다.
파이프라인 정의 만들기
azd
템플릿에 CI/CD 파이프라인 정의 파일이 아직 없는 경우 직접 만들 수 있습니다. CI/CD 파이프라인 정의에는 일반적으로 4개 주요 섹션이 있습니다.
- 트리거
- permissions
- 운영 체제 또는 풀
- 실행할 단계
다음 예제에서는 GitHub Actions 및 Azure Pipelines에 대한 정의 파일 및 관련 구성을 만드는 방법을 보여 줍니다.
GitHub Actions에서 실행 azd
하려면 다음 구성이 필요합니다.
- 범위 부여
id-token: write
및contents: read
액세스 - 이미 설치된 Docker 이미지를
azd
사용하지 않는 한 azd 작업을 설치합니다.
다음 템플릿을 고유한 파이프라인 정의의 시작점으로 사용할 수 있습니다.
on:
workflow_dispatch:
push:
# Run when commits are pushed to mainline branch (main or master)
# Set this to the mainline branch you are using
branches:
- main
- master
# Set this permission if you are using a Federated Credential.
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
# azd build-in variables.
# This variables are always set by `azd pipeline config`
# You can set them as global env (apply to all steps) or you can add them to individual steps' environment
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
## Define the additional variables or secrets that are required globally (provision and deploy)
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
steps:
- name: Checkout
uses: actions/checkout@v4
# using the install-azd action
- name: Install azd
uses: Azure/setup-azd@v1.0.0
# # If you want to use azd-daily build, or install it from a PR, you can remove previous step and
# # use the next one:
# - name: Install azd - daily or from PR
# # Update this scrip based on the OS - pool of your pipeline. This example is for a linux pipeline installing daily build
# run: curl -fsSL https://aka.ms/install-azd.sh | bash -s -- --version daily
# shell: pwsh
# azd set up Federated Credential by default. You can remove this step if you are using Client Credentials
- name: Log in with Azure (Federated Credentials)
if: ${{ env.AZURE_CLIENT_ID != '' }}
run: |
azd auth login `
--client-id "$Env:AZURE_CLIENT_ID" `
--federated-credential-provider "github" `
--tenant-id "$Env:AZURE_TENANT_ID"
shell: pwsh
## If you set up your pipeline with Client Credentials, remove previous step and uncomment this one
# - name: Log in with Azure (Client Credentials)
# if: ${{ env.AZURE_CREDENTIALS != '' }}
# run: |
# $info = $Env:AZURE_CREDENTIALS | ConvertFrom-Json -AsHashtable;
# Write-Host "::add-mask::$($info.clientSecret)"
# azd auth login `
# --client-id "$($info.clientId)" `
# --client-secret "$($info.clientSecret)" `
# --tenant-id "$($info.tenantId)"
# shell: pwsh
# env:
# AZURE_CREDENTIALS: ${{ secrets.AZURE_CREDENTIALS }}
- name: Provision Infrastructure
run: azd provision --no-prompt
env:
# # uncomment this if you are using infrastructure parameters
# AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
## Define the additional variables or secrets that are required only for provision
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}
- name: Deploy Application
run: azd deploy --no-prompt
env:
## Define the additional variables or secrets that are required only for deploy
# ADDITIONAL_VARIABLE_PLACEHOLDER: ${{ variables.ADDITIONAL_VARIABLE_PLACEHOLDER }}
# ADDITIONAL_SECRET_PLACEHOLDER: ${{ secrets.ADDITIONAL_SECRET_PLACEHOLDER }}