자습서: Jenkins를 사용하여 Azure Functions에 배포

Important

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

Azure Functions 는 서버리스 컴퓨팅 서비스입니다. Azure Functions를 사용하면 인프라를 프로비전하거나 관리하지 않고도 주문형 코드를 실행할 수 있습니다. 이 자습서에서는 Azure Functions 플러그 인을 사용하여 Azure Functions에 Java 함수를 배포하는 방법을 보여 줍니다.

필수 조건

소스 코드 보기

이 자습서에 사용된 소스 코드는 Visual Studio China GitHub 리포지토리에 있습니다.

Java 함수 만들기

Java 런타임 스택을 사용하여 Java 함수를 만들려면 Azure Portal 또는 Azure CLI사용합니다.

다음 단계에서는 Azure CLI를 사용하여 Java 함수를 만드는 방법을 보여줍니다.

  1. 리소스 그룹을 만들고 resource_group> 자리 표시자를 리소스 그룹 이름으로 바꿉<니다.

    az group create --name <resource_group> --location eastus
    
  2. 자리 표시자를 적절한 값으로 대체하여 Azure Storage 계정을 만듭니다.

    az storage account create --name <storage_account> --location eastus --resource-group <resource_group> --sku Standard_LRS    
    
  3. 자리 표시자를 적절한 값으로 대체하여 테스트 함수 앱을 만듭니다.

    az functionapp create --resource-group <resource_group> --runtime java --consumption-plan-location eastus --name <function_app> --storage-account <storage_account> --functions-version 2
    

Jenkins 서버 준비

다음 단계에서는 Jenkins 서버를 준비하는 방법을 설명합니다.

  1. Azure에 Jenkins 서버를 배포합니다. Jenkins 서버의 인스턴스가 아직 설치되어 있지 않은 경우 Azure에서 Jenkins 서버 만들기 문서에서 프로세스를 안내합니다.

  2. SSH를 사용하여 Jenkins 인스턴스에 로그인합니다.

  3. Jenkins 인스턴스에서 Az CLI 버전 2.0.67 이상을 설치합니다.

  4. 다음 명령을 사용하여 maven을 설치합니다.

    sudo apt install -y maven
    
  5. Jenkins 인스턴스에서 터미널 프롬프트에서 다음 명령을 실행하여 Azure Functions Core Tools를 설치합니다.

    curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
    sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
    sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-$(lsb_release -cs)-prod $(lsb_release -cs) main" > /etc/apt/sources.list.d/dotnetdev.list'
    cat /etc/apt/sources.list.d/dotnetdev.list
    sudo apt-get update
    sudo apt-get install azure-functions-core-tools-3
    
  6. Jenkins는 Azure 리소스를 인증하고 액세스하기 위해 Azure 서비스 주체가 필요합니다. 단계별 지침은 Azure App Service에 배포를 참조하세요.

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

    1. 메뉴에서 Jenkins 관리를 선택합니다.

    2. 시스템 구성에서 플러그 인 관리를 선택합니다.

    3. 설치됨 탭을 선택합니다.

    4. 필터 필드에 .를 입력합니다credentials.

    5. 자격 증명 플러그 인이 설치되어 있는지 확인합니다. 그렇지 않은 경우 사용 가능한 탭에서 설치해야 합니다.

    The Credentials Plug-in needs to be installed.

  8. 메뉴에서 Jenkins 관리를 선택합니다.

  9. 보안에서 자격 증명 관리를 선택합니다.

  10. 자격 증명 아래에서 (전역)을 선택합니다.

  11. 메뉴에서 자격 증명 추가를 선택합니다.

  12. Microsoft Azure 서비스 주체에 대해 다음 값을 입력합니다.

    • 종류: 값을 선택합니다. 암호가 있는 사용자 이름입니다.
    • 사용자 이름: 만든 서비스 주체를 지정 appId 합니다.
    • 암호: 서비스 주체의 password (비밀)을 지정합니다.
    • ID: 자격 증명 식별자(예: azuresp.)를 지정합니다.
  13. 확인을 선택합니다.

샘플 GitHub 리포지토리 포크

  1. 홀수 또는 심지어 샘플 앱에 대한 GitHub 리포지토리에 로그인합니다.

  2. GitHub의 오른쪽 위 모서리에서 포크를 선택합니다.

  3. 프롬프트에 따라 GitHub 계정을 선택하고 포크를 완료합니다.

Jenkins 파이프라인 만들기

이 섹션에서는 Jenkins 파이프라인만듭니다.

  1. Jenkins 대시보드에서 파이프라인을 만듭니다.

  2. 실행에 대한 환경 준비를 사용하도록 설정합니다.

  3. 파이프라인 정의 섹션의 SCM에서 파이프라인 스크립트를 선택합니다.>

  4. JenkinsFile 예제에서 사용할 GitHub 포크의 URL 및 스크립트 경로("doc/resources/jenkins/JenkinsFile")를 입력합니다.

     node {
     withEnv(['AZURE_SUBSCRIPTION_ID=99999999-9999-9999-9999-999999999999',
             'AZURE_TENANT_ID=99999999-9999-9999-9999-999999999999']) {
         stage('Init') {
             cleanWs()
             checkout scm
         }
    
         stage('Build') {
             sh 'mvn clean package'
         }
    
         stage('Publish') {
             def RESOURCE_GROUP = '<resource_group>' 
             def FUNC_NAME = '<function_app>'
             // login Azure
             withCredentials([usernamePassword(credentialsId: 'azuresp', passwordVariable: 'AZURE_CLIENT_SECRET', usernameVariable: 'AZURE_CLIENT_ID')]) {
             sh '''
                 az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                 az account set -s $AZURE_SUBSCRIPTION_ID
             '''
             }
             sh 'cd $PWD/target/azure-functions/odd-or-even-function-sample && zip -r ../../../archive.zip ./* && cd -'
             sh "az functionapp deployment source config-zip -g $RESOURCE_GROUP -n $FUNC_NAME --src archive.zip"
             sh 'az logout'
             }
         }
     }
    

빌드 및 배포

이제 Jenkins 작업을 실행할 시간입니다.

  1. 먼저 Azure Functions HTTP 트리거 및 바인딩 문서의 지침을 통해 권한 부여 키를 가져옵니다.

  2. 브라우저에서 앱의 URL을 입력합니다. 자리 표시자를 적절한 값으로 바꾸고 java 함수에 대한 <입력으로 input_number> 숫자 값을 지정합니다.

    https://<function_app>.azurewebsites.net/api/HttpTrigger-Java?code=<authorization_key>&number=<input_number>
    
  3. 다음 예제 출력과 유사한 결과가 표시됩니다(여기서 홀수 365는 테스트로 사용됨).

    The number 365 is Odd.
    

리소스 정리

이 애플리케이션을 계속 사용하지 않려면 다음 단계를 사용하여 만든 리소스를 삭제합니다.

az group delete -y --no-wait -n <resource_group>

다음 단계