연습 - 템플릿 사양 게시
팀에서 회사의 새로운 거버넌스 모델을 준수하는 보안 강화 Bicep 파일을 빌드했습니다. 강화된 Bicep 파일 중 하나는 Linux 기반 Azure App Service 앱을 배포합니다. 이 연습에서는 배포 워크플로를 사용하여 Bicep 파일을 템플릿 사양으로 게시합니다.
프로세스 중에 다음을 수행합니다.
- 워크플로에 린팅 작업을 추가합니다.
- 템플릿 사양을 게시하는 워크플로 작업을 추가합니다.
- 워크플로를 수동으로 실행하고 성공적으로 완료되는지 확인합니다.
- Azure에서 게시된 템플릿 사양을 확인합니다.
워크플로에 린팅 작업 추가
리포지토리에는 시작점으로 사용할 수 있는 워크플로 초안이 포함되어 있습니다.
Visual Studio Code에서 리포지토리의 루트에 있는 .github/workflows 폴더를 확장합니다.
template-spec-linux-app-service.yml 파일을 엽니다.
워크플로 정의에는 두 가지 트리거가 포함되어 있습니다. 이 연습에서는 템플릿 사양에 대한 Bicep 파일을 수정하지 않으므로
push
트리거가 절대 발생하지 않습니다. 워크플로를 사용해 보려면workflow_dispatch
트리거를 사용하여 수동으로 호출하세요.파일 아래쪽에
# To be added
라는 주석이 보이는 곳에서 다음 린팅 작업 정의를 추가합니다.jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }}
리포지토리에는 경고 대신 오류를 내보내도록 Linter를 구성하는 bicepconfig.json 파일이 있습니다. 린팅 작업 중에 오류가 발생하면 워크플로가 실패합니다.
팁
YAML 파일은 들여쓰기를 구분합니다. 이 코드를 입력하든 아니면 붙여넣든, 들여쓰기가 정확해야 합니다. 이 연습 뒷부분에서 파일의 일치 여부를 확인할 수 있도록 전체 YAML 워크플로 정의가 표시됩니다.
워크플로에 게시 작업 추가
이제 템플릿 사양을 Azure에 게시하는 두 번째 작업을 추가할 수 있습니다.
다음 코드를 template-spec-linux-app-service.yml 파일의 끝에 추가합니다.
publish: runs-on: ubuntu-latest needs: [ lint ] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/cli@v1 name: Publish template spec with: inlineScript: | az ts create \ --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \ --name ${{ env.TEMPLATE_SPEC_NAME }} \ --version ${{ github.run_number }} \ --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \ --location ${{ env.AZURE_REGION }} \ --yes
이 작업은 리포지토리의 코드를 체크 아웃하고, 만든 GitHub 비밀을 사용하여 Azure에 로그인합니다. 그런 다음,
az ts create
명령을 실행하여 템플릿 사양을 Azure에 게시합니다.팁
간단한 설명을 위해 워크플로에서 워크플로의 실행 번호를 템플릿 사양의 버전 번호로 사용합니다. 다음 단원에서는 좀 더 복잡한 버전 관리 체계에 대해 알아보겠습니다.
파일의 변경 내용을 저장합니다.
워크플로 정의 확인 및 커밋
template-spec-linux-app-service.yml 파일이 다음 예제와 비슷한지 확인합니다.
name: template-spec-linux-app-service concurrency: template-spec-linux-app-service on: workflow_dispatch: push: branches: - main paths: - 'template-specs/linux-app-service/**' permissions: id-token: write contents: read env: AZURE_RESOURCEGROUP_NAME: ToyReusable AZURE_REGION: westus3 TEMPLATE_SPEC_NAME: linux-app-service TEMPLATE_SPEC_FILE_PATH: template-specs/linux-app-service/main.bicep jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Bicep linter run: az bicep build --file ${{ env.TEMPLATE_SPEC_FILE_PATH }} publish: runs-on: ubuntu-latest needs: [ lint ] steps: - uses: actions/checkout@v3 - uses: azure/login@v1 name: Sign in to Azure with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - uses: azure/cli@v1 name: Publish template spec with: inlineScript: | az ts create \ --resource-group ${{ env.AZURE_RESOURCEGROUP_NAME }} \ --name ${{ env.TEMPLATE_SPEC_NAME }} \ --version ${{ github.run_number }} \ --template-file ${{ env.TEMPLATE_SPEC_FILE_PATH }} \ --location ${{ env.AZURE_REGION }} \ --yes
같지 않으면 다음 예제와 일치하도록 업데이트한 후 저장합니다.
Visual Studio Code 터미널에서 다음 명령을 실행하여 변경 내용을 커밋하고 Git 리포지토리에 푸시합니다.
git add . git commit -m "Add lint and publish jobs to Linux App Service template spec workflow" git push
이 리포지토리에 처음 푸시하는 것이므로 로그인하라는 메시지가 표시됩니다.
Windows에서는 1을 입력하여 웹 브라우저로 인증한 다음, Enter를 선택합니다.
macOS에서는 권한 부여를 선택합니다.
브라우저 창이 표시됩니다. GitHub에 다시 로그인해야 할 수도 있습니다. 권한 부여를 선택합니다.
워크플로 트리거
브라우저에서 작업 탭을 선택합니다.
실패한 워크플로 실행이 이미 나열되어 있지만 걱정할 필요는 없습니다. 리포지토리를 만들 때 워크플로 정의가 아직 완료되지 않았기 때문에 실행이 실패했습니다.
template-spec-linux-app-service 워크플로를 선택하고 워크플로 실행 단추를 선택한 다음, 워크플로 실행을 선택합니다.
GitHub가 새로운 워크플로 실행을 시작합니다. 실행이 표시되지 않으면 브라우저 창을 새로 고칩니다.
목록에서 마지막 실행을 선택합니다.
워크플로 실행이 완료될 때까지 기다립니다. 실행이 표시되면 템플릿 사양이 Azure에 게시된 것입니다.
워크플로의 실행 번호(아마도 2)를 봅니다.
Azure에서 템플릿 사양 검토
Azure Portal에서 게시된 템플릿 사양을 볼 수도 있습니다.
브라우저에서 Azure Portal로 이동합니다.
ToyReusable 리소스 그룹으로 이동하여 linux-app-service 템플릿 사양을 선택합니다.
템플릿 사양의 세부 정보를 검사합니다.
최신 버전 및 버전 번호가 워크플로의 실행 번호와 동일합니다. 워크플로에서 실행 번호를 템플릿 사양의 버전 번호로 사용합니다.