GitHub Actions를 사용하여 워크플로를 자동화하고 GitHub에서 Azure App Service에 배포합니다.
필수 조건
앱을 만들 때 GitHub Actions 배포 설정
GitHub Actions 배포는 기본 웹앱 만들기 프로세스에 통합됩니다. 배포 탭에서연속 배포를 사용하도록 설정하고 선택한 조직, 리포지토리 및 분기를 구성합니다.
연속 배포를 사용하도록 설정하면 웹앱 만들기 프로세스는 기본 인증 선택에 따라 인증 방법을 자동으로 선택하고 그에 따라 앱 및 GitHub 리포지토리를 구성합니다.
참고
앱을 만들 때 Azure 계정에 특정 권한이 없다는 오류가 표시될 수 있습니다. 사용자 할당 ID를 만들고 구성하는 데 필요한 권한이 계정에 필요할 수 있습니다. 대안은 다음 섹션을 참조하세요.
배포 센터에서 GitHub Actions 배포 설정
기존 앱의 경우 App Service의 배포 센터를 사용하여 GitHub Actions를 빠르게 시작할 수 있습니다. 이 턴키 메서드는 애플리케이션 스택을 기반으로 GitHub Actions 워크플로 파일을 생성하고 GitHub 리포지토리에 커밋합니다.
배포 센터를 사용하면 사용자 할당 ID를 사용하여 보다 안전한 OpenID Connect 인증을 쉽게 구성할 수 있습니다. 자세한 내용은 사용자 할당 ID 옵션을 참조하세요.
Azure 계정에 필요한 권한이 있는 경우 사용자 할당 ID를 만들 수 있습니다. 그렇지 않으면 ID 드롭다운 메뉴에서 기존 사용자 할당 관리 ID를 선택할 수 있습니다. Azure 관리자와 협력하여 웹 사이트 참가자 역할을 사용하여 사용자 할당 관리 ID를 만들 수 있습니다.
자세한 내용은 Azure App Service에 지속적인 배포를 참조하세요.
GitHub Actions 워크플로 수동 설정
배포 센터를 사용하지 않고 워크플로를 배포할 수 있습니다. 다음 세 단계를 수행합니다.
- 배포 자격 증명을 생성합니다.
- GitHub 비밀을 구성합니다.
- GitHub 리포지토리에 워크플로 파일을 추가합니다.
배포 자격 증명 생성
OpenID Connect를 사용하여 GitHub Actions용 Azure App Service로 인증하는 것이 좋습니다. 이 인증 방법은 수명이 짧은 토큰을 사용합니다. GitHub Actions로 OpenID Connect를 설정하는 것은 더 복잡하지만 강화된 보안을 제공합니다.
사용자 할당 관리 ID, 서비스 주체 또는 게시 프로필을 사용하여 인증할 수도 있습니다.
다음 절차에서는 Azure CLI 문을 사용하여 Microsoft Entra 애플리케이션, 서비스 주체 및 페더레이션 자격 증명을 만드는 단계를 설명합니다. Azure Portal에서 Microsoft Entra 애플리케이션, 서비스 주체 및 페더레이션 자격 증명을 만드는 방법을 알아보려면 GitHub 및 Azure 연결을 참조하세요.
기존 애플리케이션이 없는 경우 리소스에 액세스할 수 있는 새 Microsoft Entra 애플리케이션 및 서비스 주체를 등록합니다. Microsoft Entra 애플리케이션을 만듭니다.
az ad app create --display-name myApp
이 명령은 appId
가 client-id
인 JSON 출력을 반환합니다. 이 값을 저장하여, 나중에 AZURE_CLIENT_ID
GitHub 비밀로 사용합니다.
Graph API를 사용하여 페더레이션된 자격 증명을 만들 때 objectId
값을 사용하고, 해당 값을 APPLICATION-OBJECT-ID
으로 참조할 때 이 값을 사용합니다.
서비스 주체를 생성합니다. JSON 결과에서 appId
를 사용하여 $appID
를 바꾼다.
이 명령은 다음 단계에서 사용할 다른 objectId
JSON 출력을 생성합니다. 새 objectId
는 assignee-object-id
입니다.
appOwnerTenantId
을 나중에 AZURE_TENANT_ID
에 사용할 GitHub 시크릿으로 복사합니다.
az ad sp create --id $appId
구독 및 개체별 새 역할 할당을 만듭니다. 기본적으로 역할 할당은 기본 구독에 연결됩니다. $subscriptionId
를 구독 ID로 바꾸고, $resourceGroupName
을 리소스 그룹 이름으로, $webappName
을 웹앱 이름으로, $assigneeObjectId
를 생성된 id
로 바꿉니다. Azure CLI를 사용하여 Azure 구독을 관리하는 방법을 알아보세요.
az role assignment create --role contributor --subscription $subscriptionId --assignee-object-id $assigneeObjectId --scope /subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Web/sites/$webappName --assignee-principal-type ServicePrincipal
다음 명령을 실행하여 Microsoft Entra 앱 에 대한 새 페더레이션 ID 자격 증명을 만듭니 다.
APPLICATION-OBJECT-ID
을(를) Active Directory 애플리케이션을 만들 때 생성한 appId
으로 바꾸십시오.
CREDENTIAL-NAME
의 값을 나중에 참조하도록 설정합니다.
subject
를 설정합니다. GitHub는 워크플로에 따라 해당 값을 정의합니다.
- GitHub Actions 환경의 작업의 경우 다음을 사용합니다.
repo:< Organization/Repository >:environment:< Name >
- 환경에 연결되지 않은 작업의 경우 워크플로
repo:< Organization/Repository >:ref:< ref path>
를 트리거하는 데 사용되는 ref 경로를 기반으로 분기/태그에 대한 ref 경로를 포함합니다. 예를 들어 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:organization/repository:ref:refs/heads/main",
"description": "Testing",
"audiences": [
"api://AzureADTokenExchange"
]
}
참고
게시 프로필을 사용하려면 기본 인증을 사용하도록 설정해야 합니다.
게시 프로필은 앱 수준의 자격 증명입니다. 게시 프로필을 GitHub 비밀로 설정합니다.
Azure Portal에서 App Service로 이동합니다.
개요 페이지에서 게시 프로필 다운로드를 선택합니다.
다운로드한 파일을 저장합니다. 파일의 내용을 사용하여 GitHub 비밀을 만듭니다.
참고
2020년 10월부터 Linux 웹앱은 게시 프로필을 다운로드하기 전에 앱 설정을 WEBSITE_WEBDEPLOY_USE_SCM
설정 true
해야 합니다.
Azure CLI에서 명령을 사용하여 서비스 주체az ad sp create-for-rbac
를 만들 수 있습니다. Azure Portal에서 Azure Cloud Shell 을 사용하거나 Open Cloud Shell을 선택하여 이 명령을 실행합니다.
az ad sp create-for-rbac --name "myApp" --role contributor \
--scopes /subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name> \
--json-auth
이전 예제에서 자리 표시자를 구독 ID, 리소스 그룹 이름 및 앱 이름으로 바꿉니다. 출력은 App Service 앱에 대한 액세스를 제공하는 역할 할당 자격 증명이 있는 JSON 개체입니다. 출력은 다음 JSON 코드 조각과 유사하게 표시됩니다. 나중에 사용할 수 있도록 이 JSON 개체를 복사합니다.
{
"clientId": "<GUID>",
"clientSecret": "<GUID>",
"subscriptionId": "<GUID>",
"tenantId": "<GUID>",
(...)
}
중요한
최소 액세스 권한을 부여하는 것이 좋습니다. 이전 예의 범위는 전체 리소스 그룹이 아닌 특정 App Service 앱으로 제한되어 있습니다.
작업에 애플리케이션의 클라이언트 ID, 테넌트 ID 및 구독 ID 를 Azure/login
제공해야 합니다. 이러한 값은 워크플로에서 직접 제공하거나 GitHub 비밀에 저장하고 워크플로에서 참조할 수 있습니다. 값을 GitHub 비밀로 저장하는 것이 더 안전한 옵션입니다.
GitHub 리포지토리를 열고 설정>>로 이동합니다.
AZURE_CLIENT_ID
, AZURE_TENANT_ID
및 AZURE_SUBSCRIPTION_ID
에 대한 비밀을 만듭니다. GitHub 비밀에 Active Directory 애플리케이션의 다음 값을 사용합니다.
GitHub 비밀 |
Active Directory 애플리케이션 |
AZURE_CLIENT_ID |
애플리케이션(클라이언트) ID |
AZURE_TENANT_ID |
디렉터리(테넌트) ID |
AZURE_SUBSCRIPTION_ID |
구독 ID |
비밀 추가를 선택하여 각 비밀을 저장합니다.
GitHub에서 리포지토리로 이동합니다. 설정>보안>비밀 및 변수>작업>새 리포지토리 비밀을 선택합니다.
이전 섹션에서 만든 앱 수준 자격 증명을 사용하려면 다운로드한 게시 프로필 파일의 내용을 비밀의 값 필드에 붙여넣습니다. 비밀 AZURE_WEBAPP_PUBLISH_PROFILE
의 이름을 지정합니다.
나중에 GitHub 워크플로 파일을 구성할 때 Azure Web App 배포 작업에서 사용합니다AZURE_WEBAPP_PUBLISH_PROFILE
. 예시:
- uses: azure/webapps-deploy@v2
with:
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
GitHub에서 리포지토리로 이동합니다. 설정>보안>비밀 및 변수>작업>새 리포지토리 비밀을 선택합니다.
이전 섹션에서 만든 사용자 수준 자격 증명을 사용하려면 Azure CLI 명령의 전체 JSON 출력을 비밀의 값 필드에 붙여넣습니다. 비밀 AZURE_CREDENTIALS
의 이름을 지정합니다.
나중에 GitHub 워크플로 파일을 구성할 때 Azure/login
의 입력 creds
에 대한 비밀을 사용합니다. 예시:
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
GitHub 리포지토리에 워크플로 파일 추가
GitHub 리포지토리의 /.github/workflows/
경로에 있는 YAML(.yml) 파일은 워크플로를 정의합니다. 이 정의는 워크플로를 구성하는 다양한 단계와 매개 변수를 포함합니다.
최소한 워크플로 파일에는 다음과 같은 고유한 단계가 있습니다.
- 만든 GitHub 비밀을 사용하여 App Service에 인증합니다.
- 웹앱을 빌드합니다.
- 웹앱을 배포합니다.
App Service 앱에 코드를 배포하려면 작업을 사용합니다 azure/webapps-deploy@v3
. 이 작업을 수행하려면 app-name
에 웹앱의 이름과, 언어 스택에 따라 package
에 배포할 *.zip
, *.war
, *.jar
또는 폴더의 경로가 필요합니다. 작업에 사용할 azure/webapps-deploy@v3
수 있는 입력의 전체 목록은 action.yml 참조하세요.
다음 예제에서는 지원되는 다양한 언어로 웹앱을 빌드하는 워크플로의 일부를 확인할 수 있습니다.
구성한 관리 ID를 사용하여 OpenID Connect로 배포하려면 azure/login@v2
작업을 client-id
, tenant-id
, 및 subscription-id
키와 함께 사용합니다. 이전에 만든 GitHub 비밀을 참조합니다.
name: .NET Core
on: [push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
DOTNET_VERSION: '6.0.x' # Set this to the dot net version to use
jobs:
build:
runs-on: ubuntu-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
# Setup .NET Core SDK
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
# Run dotnet build and publish
- name: dotnet build and publish
run: |
dotnet restore
dotnet build --configuration Release
dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
# Deploy to Azure Web apps
- name: 'Run Azure webapp deploy action using publish profile credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
- name: logout
run: |
az logout
Azure 서비스 주체를 사용하여 ASP.NET MVC(model-view-controller) 앱을 빌드하고 Azure에 배포합니다. 이 예제에서는 client-id
, tenant-id
및 subscription-id
값에 GitHub 비밀을 사용합니다. 로그인 작업에서 이러한 값을 직접 전달할 수도 있습니다.
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- name: 'Run Azure webapp deploy action using publish profile credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'
# Azure logout
- name: logout
run: |
az logout
Azure 서비스 주체를 사용하여 Java Spring Boot 앱을 빌드하고 Azure에 배포합니다. 이 예제에서는 client-id
, tenant-id
및 subscription-id
값에 GitHub 비밀을 사용합니다. 로그인 작업에서 이러한 값을 직접 전달할 수도 있습니다.
name: Java CI with Maven
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: complete
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
package: my/target/*.jar
# Azure logout
- name: logout
run: |
az logout
name: Build and deploy WAR app to Azure Web App using OpenID Connect
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: '*.war'
다음은 빌드 및 배포에 여러 작업을 사용하는 전체 예제 입니다.
name: JavaScript CI
on: [push]
permissions:
id-token: write
contents: read
name: Node.js
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '18.x' # Set this to the node version to use
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Check out the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Setup Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: 'npm install, build, and test'
run: |
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
# Deploy web app by using Azure credentials
- uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
# Azure logout
- name: logout
run: |
az logout
name: Python application
on:
[push]
permissions:
id-token: write
contents: read
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
- name: logout
run: |
az logout
publish-profile
입력은 이전에 만든 GitHub 비밀 AZURE_WEBAPP_PUBLISH_PROFILE
을 참조해야 합니다.
name: .NET Core CI
on: [push]
env:
AZURE_WEBAPP_NAME: my-app-name # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
DOTNET_VERSION: '6.0.x' # Set this to the dot net version to use
jobs:
build:
runs-on: ubuntu-latest
steps:
# Check out the repo
- uses: actions/checkout@main
# Setup .NET Core SDK
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
# Run dotnet build and publish
- name: dotnet build and publish
run: |
dotnet restore
dotnet build --configuration Release
dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
# Deploy to Azure Web apps
- name: 'Run Azure webapp deploy action using publish profile credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} # Define secret variable in repository settings as per action documentation
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
ASP.NET MVC(model-view-controller) 앱을 NuGet 및 publish-profile
을 사용하여 인증한 후 빌드하고 배포합니다.
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@main
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- name: 'Run Azure webapp deploy action using publish profile credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} # Define secret variable in repository settings as per action documentation
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'
Azure 게시 프로필을 사용하여 Java Spring Boot 앱을 빌드하고 Azure에 배포합니다. publish-profile
입력은 이전에 만든 AZURE_WEBAPP_PUBLISH_PROFILE
암호를 참조합니다.
name: Java CI with Maven
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: my-app-path
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: my/target/*.jar
war
대신 jar
을 배포하려면 package
값을 변경해야 합니다.
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: my/target/*.war
Azure 게시 프로필을 사용하여 Tomcat 앱을 빌드하고 Azure에 배포합니다. publish-profile
입력은 이전에 만든 AZURE_WEBAPP_PUBLISH_PROFILE
암호를 참조합니다.
name: Build and deploy WAR app to Azure Web App using publish profile
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
id-token: write
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: '*.war'
다음은 빌드 및 배포에 여러 작업을 사용하는 전체 예제 입니다.
앱의 게시 프로필을 사용하여 Node.js 앱을 빌드하고 Azure에 배포합니다. publish-profile
입력은 이전에 만든 AZURE_WEBAPP_PUBLISH_PROFILE
암호를 참조합니다.
# File: .github/workflows/workflow.yml
name: JavaScript CI
on: [push]
env:
AZURE_WEBAPP_NAME: my-app-name # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '18.x' # Set this to the node version to use
jobs:
build-and-deploy:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@main
- name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: npm install, build, and test
run: |
# Build and test the project, then
# deploy to Azure Web App.
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
- name: 'Deploy to Azure WebApp'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
앱의 게시 프로필을 사용하여 Python 앱을 빌드하고 Azure에 배포합니다. publish-profile
입력은 이전에 만든 AZURE_WEBAPP_PUBLISH_PROFILE
비밀을 참조한다는 점에 주목하세요.
name: Python CI
on:
[push]
env:
AZURE_WEBAPP_NAME: my-web-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Building web app
uses: azure/appservice-build@v2
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
구성한 서비스 주체를 사용하여 배포하려면 azure/login@v2
작업을 creds
키와 함께 사용하고, 이전에 만든 AZURE_CREDENTIALS
비밀을 참조하세요.
name: .NET Core
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
DOTNET_VERSION: '6.0.x' # Set this to the dot net version to use
jobs:
build:
runs-on: ubuntu-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
# Set up .NET Core SDK
- name: Setup .NET Core
uses: actions/setup-dotnet@v3
with:
dotnet-version: ${{ env.DOTNET_VERSION }}
# Run dotnet build and publish
- name: dotnet build and publish
run: |
dotnet restore
dotnet build --configuration Release
dotnet publish -c Release --property:PublishDir='${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
# Deploy to Azure Web apps
- name: 'Run Azure webapp deploy action using Azure Credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/myapp'
- name: logout
run: |
az logout
Azure 서비스 주체를 사용하여 ASP.NET MVC(model-view-controller) 앱을 빌드하고 Azure에 배포합니다. creds
입력은 이전에 만든 AZURE_CREDENTIALS
암호를 참조합니다.
name: Deploy ASP.NET MVC App deploy to Azure Web App
on: [push]
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
NUGET_VERSION: '5.3.x' # Set this to the dot net version to use
jobs:
build-and-deploy:
runs-on: windows-latest
steps:
# Check out the repo
- uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Install Nuget
uses: nuget/setup-nuget@v1
with:
nuget-version: ${{ env.NUGET_VERSION}}
- name: NuGet to restore dependencies as well as project-specific tools that are specified in the project file
run: nuget restore
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v1.0.2
- name: Run MSBuild
run: msbuild .\SampleWebApplication.sln
- name: 'Run Azure webapp deploy action using Azure Credentials'
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }} # Replace with your app name
package: '${{ env.AZURE_WEBAPP_PACKAGE_PATH }}/SampleWebApplication/'
# Azure logout
- name: logout
run: |
az logout
Azure 서비스 주체를 사용하여 Java Spring Boot 앱을 빌드하고 Azure에 배포합니다. creds
입력은 이전에 만든 AZURE_CREDENTIALS
암호를 참조합니다.
name: Java CI with Maven
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Set up JDK 1.8
uses: actions/setup-java@v3
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml
working-directory: complete
- name: Azure WebApp
uses: Azure/webapps-deploy@v3
with:
app-name: my-app-name
package: my/target/*.jar
# Azure logout
- name: logout
run: |
az logout
Azure 서비스 주체를 사용하여 Tomcat 앱을 빌드하고 Azure에 배포합니다. creds
입력은 이전에 만든 AZURE_CREDENTIALS
암호를 참조합니다.
name: Build and deploy WAR app to Azure Web App using Service Principal Connect
env:
JAVA_VERSION: '11' # Set this to the Java version to use
DISTRIBUTION: microsoft # Set this to the Java distribution
AZURE_WEBAPP_NAME: sampleapp # Set this to the name of your web app
on: [push]
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java version
uses: actions/setup-java@v3.0.0
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.DISTRIBUTION }}
cache: 'maven'
- name: Build with Maven
run: mvn clean install
- name: Login to Azure
uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: '*.war'
다음은 빌드 및 배포에 여러 작업을 사용하는 전체 예제 입니다.
Azure 서비스 주체를 사용하여 azure에 Node.js 앱을 빌드하고 배포합니다. creds
입력은 이전에 만든 AZURE_CREDENTIALS
암호를 참조합니다.
name: JavaScript CI
on: [push]
name: Node.js
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: 'my-app-path' # Set this to the path to your web app project, defaults to the repository root
NODE_VERSION: '18.x' # Set this to the node version to use
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
# Check out the repo
- name: 'Checkout GitHub Action'
uses: actions/checkout@main
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Setup Node ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: 'npm install, build, and test'
run: |
npm install
npm run build --if-present
npm run test --if-present
working-directory: my-app-path
# Deploy web app using Azure credentials
- uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
# Azure logout
- name: logout
run: |
az logout
Azure 서비스 주체를 사용하여 Python 앱을 빌드하고 Azure에 배포합니다. creds
입력은 이전에 만든 AZURE_CREDENTIALS
암호를 참조합니다.
name: Python application
on:
[push]
env:
AZURE_WEBAPP_NAME: my-app # Set this to your application's name
AZURE_WEBAPP_PACKAGE_PATH: '.' # Set this to the path to your web app project, defaults to the repository root
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: azure/login@v2
with:
creds: ${{ secrets.AZURE_CREDENTIALS }}
- name: Set up Python 3.x
uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Deploy web App using GH Action azure/webapps-deploy
uses: azure/webapps-deploy@v3
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }}
- name: logout
run: |
az logout
자주 묻는 질문
Maven 플러그 인을 통해 WAR 파일을 배포하려면 어떻게 해야 하나요?
Maven 플러그 인을 사용하여 Java Tomcat 프로젝트를 구성한 경우 이 플러그 인을 통해 Azure App Service에 배포할 수도 있습니다. Azure CLI GitHub 작업을 사용하는 경우 Azure 자격 증명을 사용합니다.
- name: Azure CLI script file
uses: azure/cli@v2
with:
inlineScript: |
mvn package azure-webapp:deploy
Maven 플러그 인을 사용하고 구성하는 방법에 대한 자세한 내용은 Azure App Service용 Maven 플러그 인 wiki를 참조하세요.
Azure CLI를 통해 WAR 파일을 배포하려면 어떻게 해야 하나요?
Azure CLI를 사용하여 App Service에 배포하려는 경우 Azure CLI에 대한 GitHub 작업을 사용할 수 있습니다.
- name: Azure CLI script
uses: azure/cli@v2
with:
inlineScript: |
az webapp deploy --src-path '${{ github.workspace }}/target/yourpackage.war' --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --async true --type war
Azure CLI에 대한 GitHub 작업을 사용하고 구성하는 방법에 대한 자세한 내용은 Azure CLI GitHub 작업을 참조하세요.
명령 사용 az webapp deploy
방법 및 매개 변수 세부 정보를 포함하여 명령에 대한 자세한 내용은 설명서를 참조az webapp deploy
하세요.
시작 파일을 어떻게 배포하나요?
Azure CLI에 대한 GitHub Action을 사용합니다. 예시:
- name: Deploy startup script
uses: azure/cli@v2
with:
inlineScript: |
az webapp deploy --src-path ${{ github.workspace }}/src/main/azure/createPasswordlessDataSource.sh --name ${{ env.AZURE_WEBAPP_NAME }} --resource-group ${{ env.RESOURCE_GROUP }} --type startup --track-status false
컨테이너에 배포하려면 어떻게 해야 하나요?
Azure 웹 배포 작업을 사용하면 GitHub Actions를 사용하여 App Service에 사용자 지정 컨테이너를 배포하는 워크플로를 자동화할 수 있습니다. 자세한 내용은 컨테이너에 배포를 참조하세요.
배포 후 Tomcat 구성을 어떻게 업데이트하나요?
배포 후 웹앱 설정을 업데이트하려면 App Service 설정 작업을 사용할 수 있습니다.
- uses: azure/appservice-settings@v1
with:
app-name: 'my-app'
slot-name: 'staging' # Optional and needed only if the settings have to be configured on the specific deployment slot
app-settings-json: '[{ "name": "CATALINA_OPTS", "value": "-Dfoo=bar" }]'
connection-strings-json: '${{ secrets.CONNECTION_STRINGS }}'
general-settings-json: '{"alwaysOn": "false", "webSocketsEnabled": "true"}' #'General configuration settings as Key Value pairs'
id: settings
이 작업을 사용하고 구성하는 방법에 대한 자세한 내용은 App Service 설정 리포지토리를 참조하세요.
관련 콘텐츠
Azure GitHub Actions 및 워크플로에서 다음 참조를 확인하세요.