Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

2.

...

배포 준비

2.1 소스 준비하기

일감을 처리하가 위해서는 로컬 작업 환경에 다음의 전제 조건이 충족되어야 한다.

...

Code Block
appmod-demo# az aks update -n $AKS_CLUSTER_NAME -g $RESOURCE_GROUP --attach-acr $ACR_NAME
AAD role propagation done[############################################]  100.0000%{
  "aadProfile": null,
  "addonProfiles": null,
  "agentPoolProfiles": [
    {
      "availabilityZones": null,
      "count": 2,
<중략>
  "tags": null,
  "type": "Microsoft.ContainerService/ManagedClusters",
  "windowsProfile": {
    "adminPassword": null,
    "adminUsername": "azureuser",
    "enableCsiProxy": true,
    "licenseType": null
  }
}
appmod-demo#

이제 "로컬 환경 작업" Issue는 Done으로 이동시키고 "Azure Resource 작업"을 Doing으로 이동시키고 자신에게 Issue를  할당한다.

...

2.7 Modern App 샘플 준비하기

Repos 화면으로 이동하여 Import를 클릭한다.

자신의 git 리포지토리의 git clone URL을 복사하여 붙여 넣고 Import를 클릭한다.

...

성공하면 다음의 메시지가 전시된다.

...

성공적으로 Import한 결과는 다음과 같다.

...

복제한 리포지토리 내 k8s - deploy-svc.yaml 파일을 열어 각자의 상황에 맞게 이미지 관련 정보 업데이트 후 커밋을 시행한다.

...

2.8 서비스 커넥션 구성하기

AKS, ACR 등에 대한 서비스 커넥션을 구성하기 위해서는 해당 Azure 리소스에 대하여 적절한 권한이 부여되어야 한다. 본 튜토리얼에서는 이미 권한이 할당되어 있는 것으로 간주한다.

관련한 자세한 내용은 서비스 커넥션 관리 를 참조한다.

좌측 하단의 Project Settings > Pipelines > Service Connections 를 선택하고 다음 Create  service connection을 클릭한다.

...

docker 라고 키워드를 입력하여 검새 결과 중 Docker Registry를 선택하고 Next를 클릭한다.

...

다음의 순서에 따라 구성하고 Save를 클릭 한다.

  • Registry type : Azure Container Registry 선택

  • Subscription : 해당 구독 선택

  • Azure container registry : 생성 ACR 선택

  • Service connection name : SvcConn4Acr 입력

  • Grant access permission to all pipeliness 선택

Image Removed

우측 상단의 New service connection을 선택한다.

kuber라고 키워드를 입력하여 검새 결과 중 Kubernetes를 선택하고 Next를 클릭한다.

...

다음의 순서에 따라 구성하고 Save를 클릭 한다.

  • Registry type : Azure Container Registry 선택

  • Subscription : 해당 구독 선택

  • Azure container registry : 생성 ACR 선택

  • Service connection name : SvcConn4Acr 입력

  • Grant access permission to all pipeliness 선택

Image Removed

구성이 모두 완료된 결과는 다음과 같다.

...

2.9 CI 파이프라인 구성하기

Pipelines > Pipelines에서 Create pipeline을 선택한다.

Connect 탭 화면에서 Azure Repos Git를 선택한다.

...

Select 탭 화면에서 2023_TDG_AKS_CICD_Demo를 선택한다. 

기본 구성해 둔 azure-pipelines.yml 이 자동으로 로딩 된다.

만약 자동으로 로딩이 되지 않으면 기본 제공되는 파일 내용을 삭제 하고 다음 내용을 복사하여 붙여 넣는다.

Code Block
# Maven
# Build your Java project and run tests with Apache Maven.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/java

trigger:
- main

steps:
- task: Maven@3
  displayName: 'Maven Build'

- task: Docker@2
  displayName: 'Docker Build'
  inputs:
    containerRegistry: 'SvcConn4Acr'
    repository: 'appmod-demo4btc'
    command: 'buildAndPush'
    Dockerfile: 'Dockerfile'
    tags: |
      $(Build.BuildId)
      latest

- task: Docker@2
  displayName: 'Docker Push'
  inputs:
    containerRegistry: 'SvcConn4Acr'
    repository: 'appmod-demo4btc'
    command: 'buildAndPush'
    Dockerfile: 'Dockerfile'
    tags: |
      $(Build.BuildId)
      latest

- task: Bash@3
  displayName: 'Tag Update'
  inputs:
    targetType: 'inline'
    script: 'sed -i "s/latest/$(Build.BuildId)/g" k8s/deploy-svc.yaml'

- task: PublishBuildArtifacts@1
  displayName: 'Build Artifact Publish'
  inputs:
    PathtoPublish: 'k8s/deploy-svc.yaml'
    ArtifactName: 'drop'
    publishLocation: 'Container'

서비스 커넥션 정보 및 리포지토리 정보를 각자 상황에 맞게 선택/입력 및 업데이트 하고 Save  한다.

...

Azure 파이프라인 관련 상세 내용 : Azure CI/CD Pipeline 구축 가이드 참조

CI 파이프라인 설명

Trigger 

main 브랜치의 코드 변경이 감지되면 CI 파이프라인이 트리거 된다.

Code Block
trigger:
- main

Maven 빌드 

Maven을 통해 애플리케이션을 빌드 한다.

Code Block
steps:
- task: Maven@3
  displayName: 'Maven Build'

Docker 빌드, 태그 및 푸시 

Maven 빌드의 결과물로(war 또는 jar) Docker 이미지를 빌드, 태그하여 ACR로 푸시를 수행한다.

Code Block
- task: Docker@2
  displayName: 'Docker Build'
  inputs:
    containerRegistry: 'SvcConn4Acr'
    repository: 'appmod-demo4btc'
    command: 'buildAndPush'
    Dockerfile: 'Dockerfile'
    tags: |
      $(Build.BuildId)
      latest

- task: Docker@2
  displayName: 'Docker Push'
  inputs:
    containerRegistry: 'SvcConn4Acr'
    repository: 'appmod-demo4btc'
    command: 'buildAndPush'
    Dockerfile: 'Dockerfile'
    tags: |
      $(Build.BuildId)
      latest

YAML 파일 태그 정보 업데이트 

Kubernetes 배포를 위한 YAML 파일 내 이미지 태그를 최신 빌드 번호로 업데이트 한다.

Code Block
- task: Bash@3
  displayName: 'Tag Update'
  inputs:
    targetType: 'inline'
    script: 'sed -i "s/latest/$(Build.BuildId)/g" k8s/deploy-svc.yaml'

빌드 Artifact 게시

빌드 산출물인 YAML 파일을 drop 디렉토리에 위치 시킨다.

Code Block
- task: PublishBuildArtifacts@1
  displayName: 'Build Artifact Publish'
  inputs:
    PathtoPublish: 'k8s/deploy-svc.yaml'
    ArtifactName: 'drop'
    publishLocation: 'Container'

소스의 k8s/deploy-svc.yaml로 이동하여 Edit을 선택하고 image 정보 부분을 각자의 상황에 맞게 수정 후 Commit을 클릭한다.

Code Block
apiVersion: apps/v1
kind: Deployment
metadata:
  name: zerobigaksdemo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zero-aks-app
  template:
    metadata:
      labels:
        app: zero-aks-app
    spec:
      containers:
        - name: zero-aks-demo
          image: zeroacrdemo.azurecr.io/appmod-demo4btc:latest  //자신의 ACR 정보로 업데이트 한다.
          ports:
            - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
    name: zero-aks-app
spec:
  ports:
    - name: http-port
      port: 80
      targetPort: 8080
  selector:
    app: zero-aks-app
  type: LoadBalancer

우측 상단의 Save and run을 클릭한다.

...

Commit 메시지를 입력하고 Commit을 클릭한다.

...

CI 파이프라인을 최초 실행하는 경우에는 다음과 같이 리소스 접근에 대한 퍼미션 Confirm을 요구할수도 있다.

Image Removed

Permit을 클릭하여 파이프라인을 실행한다.

Image Removed

파이프라인 실행결과를 확인하고 정상이면 1 artifact를 클릭하여 빌드 결과물을 확인한다.

...

deploy-svc.yaml 파일에 Image 정보를 확인하여, ACR에 푸시된 최근 이미지 정보가 맞는지 확인한다.

...

더불어 Azure 포털의 ACR 리포지토리로 이동하여 빌드 이미지의 푸시 여부를 확인한다.

...

2.10 CD 파이프라인 구성하기

Pipelines > Releases에서 New pipeline을 선택한다.

...

Kubernetes 키워드를 입력 후 결과 중 Deploy to a Kubernetes cluster를 선택하여 Apply 한다.

...

Stage 이름을 입력하고 (ex) DEV) 우측 상단에 X를 클릭하여 창을 닫는다.

...

파이프라인 이름을 적당한 이름으로 변경하고 Pipelines 탭의 Add an artifact 을 선택한다.

...

Source (build pipeline)에서 소스 CI 파이프라인을 선택 후 Add를 클릭한다.

...

Stage 이름 아래  1job, 1task를 클릭한다.

...

kubectl 잡을 선택한다.

...

다음의 순서에 따라 구성을 진행한다.

  • Kubernetes service connection : 앞서 구성한 해당 서비스 커넥션을 선택한다.

  • Namespace : default 를 선택한다.

  • Command : apply를 선택한다.

  • Use Configuration files : 체크박스를 선택한다.

  • Configuration file : ... 버튼을 클릭하여 deploy-svc.yaml 파일의 위치를 찾아 선택한다.

...

선택 및 입력한 내용을 Save 하고 Create a release를 클릭한다.

...

파이프라인 실행 결과를 확인한다.

...

Image Removed

AKS의 Services and ingresses 블레이드에서 External IP를 확인하여 파이프라인의 배포 결과를 브라우저에서 확인한다.

...

Image Removed

2.11 CI/CD 검증하기

CI/CD를 검증하기 위해서는 각각 트리거 설정이 필요하다.

CI의 경우에는 이미 main 브랜치에 대하여 설정이 되어있다.

...

CD에 대한 트리거 설정을 위해 Pipelines > Releases에서 우측 상단 Edit을 선택한다.

...

Artifacts에서 다음 1번을 선택 후 Continuous deployment trigger를 Enabled 신킨 후 우측 상단에 X를 클릭하여 창을 닫는다.

...

우측 상단에 Save 를 선택하여 설정을 저장한다.

이제 Repos > Files 화면에서 src/main/java/hello/Application.java 파일에서 메시지를 변경하고 Commit을 수행한다.

  • 기존 : Hello, You are ...

  • 변경 :  Hi, You are ...

Pipeline 으로 이동하면 CI 파이프라인이 트리거 되어 실행되는 것을 확인할 수 있다.

...

CI 파이프라인이 정상적으로 종료되면, 바로 CD 파이프라인이 트리거 되어 실행되는 것을 확인할 수 있다.

...

CD 파이프라인이 성공적으로 종료되면 브라우저를 새로고침하여 실행 및 배포 결과를 확인한다.

...

이로서 CI/CD 파아프라인이 정상적으로 구성된 것을 확인할 수 있다.

3. Backlog 완료하기

Boards > Boards로 이동하여 Azure DevOps 작업 Issue를 Done으로 이동하고 모든 Backlog를 완료한다.

...