Azure Pipelines을 사용하는 MicroProfile 앱의 CI/CD

이 자습서에서는 Azure Web App for Containers에 MicroProfile Java EE 애플리케이션을 배포하도록 Azure Pipelines CI/CD(지속적인 통합 및 지속적인 배포) 릴리스 주기를 간편하게 설정하는 방법을 보여줍니다. 이 자습서의 MicroProfile 앱은 Payara Micro 기본 이미지를 사용하여 WAR 파일을 만듭니다.

FROM payara/micro:5.182
COPY target/*.war $DEPLOY_DIR/ROOT.war
EXPOSE 8080

Docker 이미지를 만들고 컨테이너 이미지를 ACR(Azure Container Registry)에 푸시하여 Azure Pipelines 컨테이너화 프로세스를 시작합니다. Azure Pipelines 릴리스 파이프라인을 만들고 컨테이너 이미지를 웹앱에 배포하여 프로세스를 완료합니다.

필수 조건

  1. Azure Portal에서 Azure Container Registry를 만듭니다.

  2. Azure Portal에서 컨테이너용 Azure Web App을 만듭니다. OS용 Linux선택하고 컨테이너 구성에 대해 이미지 원본으로 빠른 시작을 선택합니다.

  3. 에서 샘플 GitHub 리포지 https://github.com/Azure-Samples/microprofile-hello-azure토리에서 복제 URL을 복사하고 저장합니다.

  4. Azure DevOps 조직에 등록하거나 로그인하고 새 프로젝트를 만듭니다.

  5. 샘플 GitHub 리포지토리를 Azure Repos로 가져옵니다.

    1. Azure DevOps 프로젝트 페이지의 왼쪽 탐색 영역에서 Repos를 선택합니다.
    2. 리포지토리 아래 또는 가져오기에서 가져오기를 선택합니다.
    3. 복제 URL에서 저장한 Git 복제 URL을 입력하고 가져오기를 선택합니다.

빌드 파이프라인 만들기

Azure Pipelines의 연속 통합 빌드 파이프라인은 Java EE 원본 앱에 커밋이 있을 때마다 모든 빌드 작업을 자동으로 실행합니다. 이 예제에서 Azure Pipelines는 Maven을 사용하여 Java MicroProfile 프로젝트를 빌드합니다.

  1. Azure DevOps 프로젝트 페이지의 왼쪽 탐색 영역에서 파이프라인>빌드를 선택합니다.

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

  3. 클래식 편집기 사용을 선택해 YAML 없이 파이프라인을 만듭니다.

  4. 프로젝트 이름과 가져온 GitHub 리포지토리가 필드에 표시되는지 확인하고, 계속을 선택합니다.

  5. 템플릿 목록에서 Maven을 선택한 다음 적용을 선택합니다.

  6. 오른쪽 창에서 호스트된 Ubuntu 1604가 에이전트 풀 드롭다운에 표시되는지 확인합니다.

    참고 항목

    Azure Pipelines는 이 설정을 통해 어떤 빌드 서버를 사용해야 하는지 알 수 있습니다. 사용자 지정된 프라이빗 빌드 서버를 사용할 수도 있습니다.

  7. 연속 통합을 위해 파이프라인을 구성하려면 왼쪽 창에서 트리거 탭을 선택한 다음 연속 통합 사용 옆에 있는 검사 상자를 선택합니다.

  8. 페이지 맨 위에서 저장 및 큐에 넣기 옆에 있는 드롭다운을 선택하고, 저장을 선택합니다.

    Enable continuous integration

Docker 빌드 이미지 만들기

Azure Pipelines는 Payara Micro의 기본 이미지가 있는 Dockerfile을 사용하여 Docker 이미지를 만듭니다.

  1. 작업 탭을 선택한 다음 에이전트 작업 1 옆에 있는 더하기 기호 + 를 선택하여 작업을 추가합니다.

    Add a new task

  2. 오른쪽 창의 템플릿 목록에서 Docker를 선택한 다음 추가를 선택합니다.

  3. 왼쪽 창에서 buildAndPush를 선택하고, 오른쪽 창의 표시 이름 필드에 설명을 입력합니다.

  4. 컨테이너 리포지토리 아래에서 컨테이너 레지스트리 필드 옆에 있는 새로 만들기를 선택합니다.

  5. 다음과 같이 Docker 레지스트리 서비스 연결 추가 대화 상자를 작성합니다.

    필드
    레지스트리 유형 Azure Container Registry를 선택합니다.
    연결 이름 연결 이름을 입력합니다.
    Azure 구독 드롭다운에서 Azure 구독을 선택하고 필요한 경우 권한 부여를 선택합니다.
    Azure 컨테이너 레지스트리 드롭다운에서 Azure Container Registry 이름을 선택합니다.
  6. 확인을 선택합니다.

    Add a Docker Registry service connection

    참고 항목

    Docker 허브 또는 다른 레지스트리를 사용하는 경우 레지스트리 유형 옆에 있는 Azure Container Registry 대신 Docker 허브 또는 기타선택합니다. 그런 다음 컨테이너 레지스트리에 대한 자격 증명 및 연결 정보를 제공합니다.

  7. 명령 아래의 명령 드롭다운에서 빌드를 선택합니다.

  8. Dockerfile 필드 옆에 있는 줄임표를선택하고 GitHub 리포지토리에서 Dockerfile을 찾아 선택한 다음 확인을 선택합니다.

    Select the Dockerfile

  9. 태그 아래에서 새 줄에 최신 줄을 입력합니다.

  10. 페이지 맨 위에서 저장 및 큐에 넣기 옆에 있는 드롭다운을 선택하고, 저장을 선택합니다.

ACR에 Docker 이미지 푸시

Azure Pipelines는 Docker 이미지를 Azure Container Registry에 푸시하고 이를 사용하여 MicroProfile API 앱을 컨테이너화된 Java 웹앱으로 실행합니다.

  1. Azure Pipelines에서 Docker를 사용하므로 Docker 빌드 이미지 만들기의 단계를 반복하여 다른 Docker 템플릿을 만듭니다. 이번에는 명령 드롭다운에서 푸시선택합니다.

  2. 저장 및 큐에 넣기 옆에 있는 드롭다운을 선택하고, 저장 및 큐에 넣기를 선택합니다.

  3. 실행 파이프라인 팝업에서 에이전트 풀에서 Hosted Ubuntu 1604가 선택되어 있는지 확인하고 저장 및 실행을 선택합니다.

  4. 빌드가 완료되면 빌드 페이지에서 하이퍼링크를 선택하여 빌드 성공을 확인하고 다른 세부 정보를 볼 수 있습니다.

    Select the build hyperlink

릴리스 파이프라인 만들기

Azure Pipelines 연속 릴리스 파이프라인은 빌드가 성공하는 즉시 Azure와 같은 대상 환경에 대한 배포를 자동으로 트리거합니다. 개발, 테스트, 스테이징 또는 프로덕션과 같은 환경에 대한 릴리스 파이프라인을 만들 수 있습니다.

  1. Azure DevOps 프로젝트 페이지의 왼쪽 탐색 영역에서 파이프라인>릴리스를 선택합니다.

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

  3. 템플릿 목록에서 Java 앱을 Azure 앱 서비스에 배포를 선택한 다음 적용을 선택합니다.

    Select the Deploy a Java app to Azure App Service template

  4. 팝업 창에서 1단계를 개발, 테스트, 스테이징 또는 프로덕션과 같은 스테이지 이름으로 변경한 다음 창을 닫습니다.

  5. 왼쪽 창의 아티팩트 아래에서 추가를 선택하여 빌드 파이프라인의 아티팩트와 릴리스 파이프라인을 연결합니다.

  6. 오른쪽 창의 소스(빌드 파이프라인) 아래에 있는 드롭다운에서 해당 빌드 파이프라인을 선택한 다음, 추가를 선택합니다.

    Add a build artifact

  7. 프로덕션 단계에서 하이퍼링크를 선택하여 스테이지 작업을 봅니다.

    Select the stage name

  8. 오른쪽 창에서 다음과 같이 양식을 작성합니다.

    필드
    Azure 구독 드롭다운에서 Azure 구독을 선택합니다.
    앱 유형 드롭다운에서 Web App for Containers(Linux)를 선택합니다.
    App Service 이름 드롭다운에서 ACR 인스턴스를 선택합니다.
    레지스트리 또는 네임스페이스 필드에 ACR 이름을 입력합니다. 예를 들어 mymicroprofileregistry.azure.io를 입력합니다.
    리포지토리 Docker 이미지가 포함된 리포지토리를 입력합니다.

    Configure stage tasks

  9. 왼쪽 창에서 Azure 앱 서비스에 전쟁 배포를 선택하고 오른쪽 창에서 태그 필드에 최신 태그를 입력합니다.

  10. 왼쪽 창에서 에이전트에서 실행을 선택하고 오른쪽 창의 에이전트 풀 드롭다운에서 Hosted Ubuntu 1604선택합니다.

환경 변수 설정

배포하는 동안 컨테이너 레지스트리에 연결할 환경 변수를 추가하고 정의합니다.

  1. 변수 탭을 선택한 다음 추가를 선택하여 컨테이너 레지스트리 URL, 사용자 이름 및 암호에 대해 다음 변수를 추가합니다.

    속성
    registry.url 컨테이너 레지스트리 URL을 입력합니다. 예: https://mymicroprofileregistry.azure.io
    registry.username 레지스트리의 사용자 이름을 입력합니다.
    registry.password 레지스트리의 암호를 입력합니다. 보안을 위해 잠금 아이콘을 선택하여 암호 값을 숨깁니다.

    Add variables

  2. 작업 탭의 왼쪽 창에서 Azure 앱 서비스에 전쟁 배포를 선택합니다.

  3. 오른쪽 창에서 애플리케이션 및 구성 설정을 확장한 다음, 앱 설정 필드 옆에 있는 줄임표 ...를 선택합니다.

  4. 앱 설정 팝업에서 추가를 선택하여 앱 설정 변수를 정의하고 할당합니다.

    속성
    DOCKER_REGISTRY_SERVER_URL $(registry.url)
    DOCKER_REGISTRY_SERVER_USERNAME $(registry.username)
    DOCKER_REGISTRY_SERVER_PASSWORD $(registry.password)
  5. 확인을 선택합니다.

    Add and set variables

지속적인 배포 설정

지속적인 배포를 사용하려면 다음을 수행합니다.

  1. 파이프라인 탭의 아티팩트 아래에서 빌드 아티팩트의 번개 아이콘을 선택합니다.

  2. 오른쪽 창에서 연속 배포 트리거사용으로 설정합니다.

  3. 오른쪽 위에서 저장을 선택한 다음 다시 저장을 선택합니다.

    Enable continuous deployment trigger

Java 앱 배포

이제 CI/CD를 사용하도록 설정했으므로 소스 코드를 수정하면 빌드 및 릴리스가 자동으로 만들어지고 실행됩니다. 다음과 같이 릴리스를 수동으로 만들고 실행할 수도 있습니다.

  1. 릴리스 파이프라인 페이지의 오른쪽 위에서 릴리스 만들기를 선택합니다.

  2. 새 릴리스 만들기 페이지에서 단계 아래의 스테이지 이름을 선택하여 트리거를 자동화된 버전에서 수동으로 변경합니다.

  3. 만들기를 실행합니다.

  4. 릴리스 이름을 선택하고, 단계를 마우스로 가리키거나 선택한 다음, 배포를 선택합니다.

Java 웹앱 테스트

배포가 성공적으로 완료되면 웹앱을 테스트합니다.

  1. Azure Portal에서 웹앱 URL을 복사합니다.

    App Service app in the Azure portal

  2. 웹 브라우저에 URL을 입력하여 앱을 실행합니다. 웹 페이지는 Hello Azure를 말 해야 합니다.

    Java web app page