자습서: Jenkins 및 Azure CLI를 사용하여 Azure 앱 서비스에 배포

Important

많은 Azure 서비스에 Jenkins 플러그 인이 있습니다. 이러한 플러그 인 중 일부는 2024년 2월 29일부터 지원되지 않습니다. Azure CLI는 현재 Jenkins를 Azure 서비스와 통합하는 데 권장되는 방법입니다. 자세한 내용은 Azure용 Jenkins 플러그 인 문서를 참조하세요.

Java 웹앱을 Azure에 배포하려면 Jenkins 파이프라인에서 Azure CLI를 사용할 수 있습니다. 이 자습서에서는 다음 작업을 수행합니다.

  • Jenkins VM 만들기
  • Jenkins 구성
  • Azure에서 웹앱 만들기
  • GitHub 리포지토리 준비
  • Jenkins 파이프라인 만들기
  • 파이프라인 실행 및 웹앱 확인

필수 조건

  • Azure 구독: Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
  • Linux VM에 Jenkins - 설치
  • Azure CLI: Jenkins 서버에 Azure CLI(버전 2.0.67 이상)를 설치합니다.

Jenkins 구성

다음 단계에서는 Jenkins 컨트롤러에 필요한 Java JDK 및 Maven을 설치하는 방법을 보여줍니다.

  1. SSH를 사용하여 Jenkins 컨트롤러에 로그인합니다.

  2. apt-get 리포지토리에서 Azure용 OpenJDK의 Azul Zulu 빌드를 다운로드하고 설치합니다.

    sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
    sudo apt-add-repository "deb http://repos.azul.com/azure-only/zulu/apt stable main"
    sudo apt-get -q update
    sudo apt-get -y install zulu-8-azure-jdk
    
  3. 다음 명령을 실행하여 Maven을 설치합니다.

    sudo apt-get install -y maven
    

Jenkins 자격 증명에 Azure 서비스 주체 추가

다음 단계에서는 Azure 자격 증명을 지정하는 방법을 보여 줍니다.

  1. 자격 증명 플러그 인이 설치되어 있는지 확인합니다.

  2. Jenkins 대시보드 내에서 자격 증명 -> 시스템 ->을 선택합니다.

  3. 글로벌 자격 증명(제한 없음)을 선택합니다.

  4. Microsoft Azure 서비스 주체를 추가하려면 자격 증명 추가를 선택합니다. 자격 증명 종류가 사용자 이름 및 암호인지 확인하고 다음 항목을 입력합니다.

    • 사용자 이름: 서비스 주체 appId
    • 암호: 서비스 주체 password
    • ID: 자격 증명 식별자(예: AzureServicePrincipal)

Java 웹앱을 배포하기 위한 Azure 앱 Service 만들기

az appservice plan create를 사용하여 무료 가격 책정 계층과 함께 Azure App Service 계획을 만듭니다.

az appservice plan create \
    --name <app_service_plan> \ 
    --resource-group <resource_group> \
    --sku FREE

주요 정보:

  • 앱 서비스 계획은 앱을 호스트하는 데 사용되는 물리적 리소스를 정의합니다.
  • Appservice 계획에 할당된 모든 애플리케이션은 이러한 리소스를 공유합니다.
  • Appservice 계획을 사용하면 여러 앱을 호스팅할 때 비용을 절감할 수 있습니다.

Azure 웹앱 만들기

az webapp create를 사용하여 App Service 계획에서 myAppServicePlan 웹앱 정의를 만듭니다.

az webapp create \
    --name <app_name> \ 
    --resource-group <resource_group> \
    --plan <app_service_plan>

주요 정보:

  • 웹앱 정의는 애플리케이션에 액세스하는 URL을 제공하고 Azure에 코드를 배포하는 몇 가지 옵션을 구성합니다.
  • <app_name> 자리 표시자를 고유한 앱 이름으로 대체합니다.
  • 앱 이름은 웹앱의 기본 도메인 이름의 일부입니다. 따라서 이름은 Azure의 모든 앱에서 고유해야 합니다.
  • 사용자 지정 do기본 이름 항목을 사용자에게 노출하기 전에 웹앱에 매핑할 수 있습니다.

Java 구성

az appservice web config update를 사용하여 앱에 대한 Java 런타임 구성을 설정합니다.

az webapp config set \ 
    --name <app_name> \
    --resource-group <resource_group> \ 
    --java-version 1.8 \ 
    --java-container Tomcat \
    --java-container-version 8.0

GitHub 리포지토리 준비

  1. Azure 리포지토리용 간단한 Java 웹앱을 엽니다.

  2. 사용자 고유의 GitHub 계정에 리포지토리를 포크하려면 포크 단추를 선택합니다.

  3. 파일 이름을 클릭하여 Jenkinsfile 파일을 엽니다.

  4. 연필 아이콘을 선택하여 파일을 편집합니다.

  5. 구독 ID 및 테넌트 ID를 업데이트합니다.

      withEnv(['AZURE_SUBSCRIPTION_ID=<subscription_id>',
            'AZURE_TENANT_ID=<tenant_id>']) 
    
  6. 각각 22줄과 23줄에서 웹앱의 리소스 그룹 및 이름을 업데이트합니다.

    def resourceGroup = '<resource_group>'
    def webAppName = '<app_name>'
    
  7. Jenkins 인스턴스에서 자격 증명 ID 업데이트

    withCredentials([usernamePassword(credentialsId: '<service_princial>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
    

Jenkins 파이프라인 만들기

Jenkins 파이프라인을 만들려면 다음을 수행합니다.

  1. 웹 브라우저에서 Jenkins를 엽니다.

  2. 새 항목을 선택합니다.

  3. 작업 이름을 입력합니다.

  4. 파이프라인을 선택합니다.

  5. 확인을 선택합니다.

  6. 파이프라인을 선택합니다.

  7. 정의의 경우 SCM에서 파이프라인 스크립트를 선택합니다.

  8. SCM의 경우 Git을 선택합니다.

  9. 포크된 리포지토리에 대한 GitHub URL을 입력합니다. https:\<forked_repo\>.git

  10. 저장을 선택합니다.

파이프라인 테스트

  1. 만든 파이프라인으로 이동합니다.

  2. 지금 빌드 선택

  3. 빌드가 완료되면 콘솔 출력을 선택하여 빌드 세부 정보를 확인합니다.

웹앱 확인

WAR 파일이 웹앱에 성공적으로 배포되었는지 확인하려면 다음을 수행합니다.

  1. http://&lt;app_name>.azurewebsites.net/api/calculator/ping이라는 URL로 이동합니다.

  2. 다음과 비슷한 텍스트가 표시됩니다.

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  3. http:// app_name.azurewebsites.net/api/calculator/add?x=x>&y>=<y와 같은 URL(x와 <y를 합계할 두 값으로 대체<)으로 찾습니다>.><<>

    Example of running the demo add

Linux에서 Azure 앱 Service에 배포

App Service는 지원되는 애플리케이션 스택에 대해 기본적으로 Linux에서 웹앱을 호스트할 수도 있습니다. 사용자 지정 Linux 컨테이너(Web App for Containers라고도 함)를 실행할 수도 있습니다.

Azure App Service on Linux에 배포하도록 스크립트를 수정할 수 있습니다. Linux의 App Service는 Docker를 지원합니다. 이와 같이 서비스 런타임을 사용하여 웹앱을 Docker 이미지로 패키지하는 Dockerfile을 제공합니다. 플러그 인은 이미지를 빌드하고, Docker 레지스트리에 푸시하고, 이미지를 웹앱에 배포합니다.

  1. 사용자 지정 컨테이너사용하여 사용자 지정 소프트웨어를 Azure 앱 Service로 마이그레이션하여 Linux 및 Azure Container Registry에서 Azure 앱 서비스를 만듭니다.

        az group create --name myResourceGroup2 --location westus2
        az acr create --name myACRName --resource-group myResourceGroup2 --sku Basic --admin-enabled true
        az appservice plan create --name myAppServicePlan --resource-group  myResourceGroup2 --is-linux
        az webapp create --resource-group myResourceGroup2 --plan myAppServicePlan --name myApp --deployment-container-image-name myACRName.azurecr.io/calculator:latest
    
  2. Docker를 Jenkins에 설치합니다.

  3. Docker 파이프라인 플러그 인이 설치되어 있는지 확인합니다.

  4. 포크한 동일한 Azure용 Java Web App 리포지토리에서 Jenkinsfile2 파일을 다음과 같이 편집합니다.

    1. 구독 ID 및 테넌트 ID를 업데이트합니다.

       withEnv(['AZURE_SUBSCRIPTION_ID=<mySubscriptionId>',
              'AZURE_TENANT_ID=<myTenantId>']) {
      
    2. 리소스 그룹, 웹앱 및 ACR의 이름으로 업데이트합니다(자리 표시자를 값으로 대체).

      def webAppResourceGroup = '<resource_group>'
      def webAppName = '<app_name>'
      def acrName = '<registry>'
      
    3. 자격 증명 ID로 업데이트 <azsrvprincipal\>

      withCredentials([usernamePassword(credentialsId: '<service_principal>', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
      
  5. 를 사용하여 Windows에서 Azure 웹앱에 배포할 때와 마찬가지로 새 Jenkins 파이프라인을 Jenkinsfile2만듭니다.

  6. 새 작업을 실행합니다.

  7. 확인하려면 Azure CLI에서 다음 명령을 실행합니다.

    az acr repository list -n <myRegistry> -o json
    

    다음과 유사한 결과가 표시됩니다.

    [
    "calculator"
    ]
    
  8. http://<app_name>.azurewebsites.net/api/calculator/ping 자리 표시자를 바꿉니다. 다음과 유사한 결과가 표시됩니다.

    Welcome to Java Web App!!! This is updated!
    Today's date
    
  9. http://<app_name>.azurewebsites.net/api/calculator/add?x=<x>&y=<y> 자리 표시자 바꾸기로 이동합니다. 지정 x 한 값으로 y , 합계를 계산하여 표시합니다.

다음 단계