자습서: 빌드 아티팩트용 Azure Storage 사용

Important

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

이 문서에서는 Blob Storage를 Jenkins CI(연속 통합) 솔루션에서 만든 빌드 아티팩트 리포지토리로 사용하거나 빌드 프로세스에서 사용할 다운로드 가능한 파일의 원본으로 사용하는 방법을 보여 줍니다. 이 솔루션이 유용한 시나리오 중 하나는 Agile 개발 환경(Java 또는 다른 언어 사용)에서 코딩하고, 빌드가 연속 통합에 따라 실행되고, 빌드 아티팩트의 리포지토리가 필요한 경우입니다. 예를 들어 다른 조직 구성원, 고객 또는 기본 보관을 얻을 수 있도록 빌드 아티팩트를 위한 리포지토리가 필요합니다. 또 다른 시나리오는 빌드 작업 자체에 다른 파일(예: 빌드 입력의 일부로 다운로드할 종속성)이 필요한 경우입니다.

필수 조건

Azure CLI를 실행하는 데 필요한 Azure 자격 증명 추가

  1. Jenkins 포털로 이동합니다.

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

  3. 자격 증명 관리를 선택합니다.

  4. 전역 do기본 선택합니다.

  5. 자격 증명 추가를 선택합니다.

  6. 다음과 같은 필수 필드를 입력합니다.

    • 종류: 암호가 있는 사용자 이름을 선택합니다.
    • 사용자 이름: 서비스 주체를 지정 appId 합니다.
    • 암호: 서비스 주체를 지정 password 합니다.
    • ID: 자격 증명 identifer를 지정합니다(예: azuresp.).
    • 설명: 필요에 따라 사용자 환경에 대한 의미 있는 설명을 포함합니다.
  7. 확인을 선택하여 자격 증명을 만듭니다.

빌드 아티팩트를 업로드하는 파이프라인 작업 만들기

다음 단계는 파이프라인 작업을 만드는 과정을 안내합니다. 파이프라인 작업은 여러 파일을 만들고 Azure CLI를 사용하여 스토리지 계정에 파일을 업로드합니다.

  1. Jenkins 대시보드에서 새 항목을 선택합니다.

  2. 작업 myjob의 이름을 지정하고 파이프라인을 선택한 다음 확인을 선택합니다.

  3. 작업 구성의 파이프라인 섹션에서 파이프라인 스크립트를 선택하고 다음을 스크립트에 붙여넣습니다. 자리 표시자는 사용자 환경의 값에 맞게 편집하세요.

    pipeline {
      agent any
      environment {
        AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999'
        AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999'
        AZURE_STORAGE_ACCOUNT='myStorageAccount'
      }
      stages {
        stage('Build') {
          steps {
            sh 'rm -rf *'
            sh 'mkdir text'
            sh 'echo Hello Azure Storage from Jenkins > ./text/hello.txt'
            sh 'date > ./text/date.txt'
          }
    
          post {
            success {
              withCredentials([usernamePassword(credentialsId: 'azuresp', 
                              passwordVariable: 'AZURE_CLIENT_SECRET', 
                              usernameVariable: 'AZURE_CLIENT_ID')]) {
                sh '''
                  echo $container_name
                  # Login to Azure with ServicePrincipal
                  az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                  # Set default subscription
                  az account set --subscription $AZURE_SUBSCRIPTION_ID
                  # Execute upload to Azure
                  az storage container create --account-name $AZURE_STORAGE_ACCOUNT --name $JOB_NAME --auth-mode login
                  az storage blob upload-batch --destination ${JOB_NAME} --source ./text --account-name $AZURE_STORAGE_ACCOUNT
                  # Logout from Azure
                  az logout
                '''
              }
            }
          }
        }
      }
    }
    
  4. 지금 빌드를 선택하여 myjob을 실행합니다.

  5. 콘솔 출력에서 상태 검사합니다. 빌드 후 작업에서 빌드 아티팩트가 업로드되면 Azure Storage에 대한 상태 메시지가 콘솔에 기록됩니다.

  6. 다음과 유사한 오류가 발생하면 컨테이너 수준에서 액세스 권한을 부여해야 합니다. ValidationError: You do not have the required permissions needed to perform this operation. 이 오류 메시지가 표시되면 다음 문서를 참조하여 해결합니다.

  7. 작업이 성공적으로 완료되면 공용 Blob을 열어 빌드 아티팩트 검사를 수행합니다.

    1. Azure Portal에 로그인합니다.
    2. 스토리지를 선택합니다.
    3. Jenkins에 사용한 스토리지 계정 이름을 선택합니다.
    4. 컨테이너를 선택합니다.
    5. Blob 목록 내에서 myjob이라는 컨테이너를 선택합니다.
    6. 다음 hello.txtdate.txt라는 두 파일이 표시됩니다.
    7. 이러한 항목 중 하나에 대한 URL을 복사하여 브라우저에 붙여넣습니다.
    8. 빌드 아티팩트로 업로드된 텍스트 파일이 표시됩니다.

    주요 정보:

    • 컨테이너 이름 및 Blob 이름은 Azure Storage에서 소문자(및 대/소문자 구분)입니다.

Azure Blob Storage에서 다운로드할 파이프라인 작업 만들기

다음 단계에서는 Azure Blob Storage에서 항목을 다운로드하도록 파이프라인 작업을 구성하는 방법을 보여 줍니다.

  1. 작업 구성의 파이프라인 섹션에서 파이프라인 스크립트를 선택하고 스크립트에 다음을 붙여넣습니다. 자리 표시자는 사용자 환경의 값에 맞게 편집하세요.

    pipeline {
      agent any
      environment {
        AZURE_SUBSCRIPTION_ID='99999999-9999-9999-9999-999999999999'
        AZURE_TENANT_ID='99999999-9999-9999-9999-999999999999'
        AZURE_STORAGE_ACCOUNT='myStorageAccount'
      }
      stages {
        stage('Build') {
          steps {
            withCredentials([usernamePassword(credentialsId: 'azuresp', 
                            passwordVariable: 'AZURE_CLIENT_SECRET', 
                            usernameVariable: 'AZURE_CLIENT_ID')]) {
              sh '''
                # Login to Azure with ServicePrincipal
                az login --service-principal -u $AZURE_CLIENT_ID -p $AZURE_CLIENT_SECRET -t $AZURE_TENANT_ID
                # Set default subscription
                az account set --subscription $AZURE_SUBSCRIPTION_ID
                # Execute upload to Azure
                az storage blob download --account-name $AZURE_STORAGE_ACCOUNT --container-name myjob --name hello.txt --file ${WORKSPACE}/hello.txt --auth-mode login
                # Logout from Azure
                az logout
              '''   
            }
          }
        }
      }
    }
    
  2. 빌드를 실행한 후 빌드 기록 콘솔 출력을 검사. 또는 다운로드 위치를 확인하여 예상한 Blob이 성공적으로 다운로드되었는지 확인할 수도 있습니다.

다음 단계