정적 웹 사이트 코드가 있는 GitHub 리포지토리입니다. GitHub 계정이 없는 경우 무료로 등록하세요.
Azure Storage에서 호스팅되는 정적 웹 사이트. Azure Storage에서 정적 웹 사이트를 호스트하는 방법을 알아봅니다. 이 예제를 수행하려면 Azure CDN도 배포해야 합니다.
참고 항목
CDN(콘텐츠 배달 네트워크)을 사용하여 전 세계 사용자의 대기 시간을 줄이고 스토리지 계정에 대한 트랜잭션 수를 줄이는 것이 일반적입니다. 정적 콘텐츠를 클라우드 기반 스토리지 서비스에 배포하면 잠재적으로 비용이 많이 드는 컴퓨팅 인스턴스의 필요성을 줄일 수 있습니다. 자세한 내용은 정적 콘텐츠 호스팅 패턴을 참조 하세요.
이 명령은 appId(사용자의 client-id)가 포함된 JSON을 출력합니다. is objectIdAPPLICATION-OBJECT-ID 및 Graph API 호출을 사용하여 페더레이션된 자격 증명을 만드는 데 사용됩니다. 이 값을 저장하여, 나중에 AZURE_CLIENT_ID GitHub 비밀로 사용합니다.
서비스 주체를 생성합니다. $appID를 JSON 출력의 appId로 대체합니다. 이 명령은 다음 단계에서 사용되는 다른 objectId JSON 출력을 생성합니다. 새 objectId는 assignee-object-id입니다.
이 명령은 다른 objectId로 JSON 출력을 생성하며 다음 단계에서 사용됩니다. 새 objectId는 assignee-object-id입니다.
appOwnerTenantId를 복사하여 나중에 AZURE_TENANT_ID에 대한 GitHub 비밀로 사용합니다.
az ad sp create --id $appId
구독 및 개체별 새 역할 할당을 만듭니다. 기본적으로 역할 할당은 기본 구독에 연결됩니다. 구독 ID, $resourceGroupName 리소스 그룹 이름 및 $assigneeObjectId 생성된 assignee-object-id 서비스 주체 개체 ID로 바꿉 $subscriptionId 니다.
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --assignee-principal-type ServicePrincipal --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName
Microsoft Entra 애플리케이션에 대한 objectId(앱을 만드는 동안 생성됨)로 바꿉 APPLICATION-OBJECT-ID 니다.
CREDENTIAL-NAME의 값을 나중에 참조하도록 설정합니다.
subject를 설정합니다. 이 값은 워크플로에 따라 GitHub에 의해 정의됩니다.
GitHub Actions 환경의 작업: repo:< Organization/Repository >:environment:< Name >
환경에 연결되지 않은 작업의 경우 워크플로를 트리거하는 데 사용되는 참조 경로를 기반으로 분기/태그에 대한 참조 경로(repo:< Organization/Repository >:ref:< ref path>)를 포함합니다. 예를 들어 repo:n-username/ node_express:ref:refs/heads/my-branch 또는 repo:n-username/ node_express:ref:refs/tags/my-tag입니다.
끌어오기 요청 이벤트에 의해 트리거된 워크플로의 경우: repo:< Organization/Repository >:pull_request
az ad app federated-credential create --id <APPLICATION-OBJECT-ID> --parameters credential.json
("credential.json" contains the following content)
{
"name": "<CREDENTIAL-NAME>",
"issuer": "https://token.actions.githubusercontent.com",
"subject": "repo:octo-org/octo-repo:environment:Production",
"description": "Testing",
"audiences": [
"api://AzureADTokenExchange"
]
}
워크플로 파일의 섹션 뒤의 on: 모든 항목을 삭제합니다. 예를 들어 다시 기본 워크플로는 다음과 같습니다.
name: CI
on:
push:
branches: [ main ]
워크플로 이름을 Blob storage website CI로 바꾸고, 체크 아웃 및 로그인 작업을 추가합니다. 이러한 작업은 사이트 코드를 체크 아웃하고 이전에 만든 AZURE_CREDENTIALS GitHub 비밀을 사용하여 Azure에서 인증합니다.
name: Blob storage website CI
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: azure/login@v1
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
Azure CLI 작업을 사용하여 Blob Storage에 코드를 업로드하고 CDN 엔드포인트를 제거합니다. az storage blob upload-batch의 경우 자리 표시자를 스토리지 계정 이름으로 바꿉니다. 스크립트가 컨테이너에 $web 업로드됩니다. 의 경우 az cdn endpoint purge자리 표시자를 CDN 프로필 이름, CDN 엔드포인트 이름 및 리소스 그룹으로 바꿉니다. CDN 제거 속도를 높이기 위해 옵션을 az cdn endpoint purge추가할 --no-wait 수 있습니다. 보안을 강화하려면 스토리지 계정 키를 사용하여 --account-key 옵션도 추가할 수 있습니다.
워크플로 파일의 섹션 뒤의 on: 모든 항목을 삭제합니다. 예를 들어 다시 기본 워크플로는 다음과 같습니다.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
권한 섹션을 추가합니다.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
체크 아웃 및 로그인 작업을 추가합니다. 이러한 작업은 사이트 코드를 체크 아웃하고 이전에 만든 GitHub 비밀을 사용하여 Azure에서 인증합니다.
name: CI with OpenID Connect
on:
push:
branches: [ main ]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: azure/login@v1
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
Azure CLI 작업을 사용하여 Blob Storage에 코드를 업로드하고 CDN 엔드포인트를 제거합니다. az storage blob upload-batch의 경우 자리 표시자를 스토리지 계정 이름으로 바꿉니다. 스크립트가 컨테이너에 $web 업로드됩니다. 의 경우 az cdn endpoint purge자리 표시자를 CDN 프로필 이름, CDN 엔드포인트 이름 및 리소스 그룹으로 바꿉니다. CDN 제거 속도를 높이기 위해 옵션을 az cdn endpoint purge추가할 --no-wait 수 있습니다. 보안을 강화하려면 스토리지 계정 키를 사용하여 --account-key 옵션도 추가할 수 있습니다.