티스토리 뷰
<참조> https://azuredevopslabs.com/labs/vstsextend/github-azurepipelines/
과제 4: CI 파이프라인에 자동화된 테스트 포함하기
CI를 성공적으로 구축했으므로 이제 배포를 할 차례다. 그러나 빌드가 릴리즈에 적합한지 여부를 어떻게 알 수 있을까? 대부분의 팀은 CI 프로세스의 일부로 단위 테스트와 같은 자동화된 테스트를 실행하여 고품질 소프트웨어를 출시하고 있는지 확인한다. 팀은 코드 적용 범위, 테스트 수행 시 코드 분석과 같은 주요 코드 메트릭을 캡처하여 코드 품질이 떨어지지 않도록 하며, 완전히 제거되지 않은 경우 기술 부채가 낮도록 유지한다.
앞에서 만든 azure-pipelines.yml 파일을 내려 놓고 몇 가지 테스트를 실행하고 테스트 결과를 게시하는 태스크를 추가할 것이다.
1. Visual Studio Code로 돌아 간다.
2. Explorer 탭에서 azure-pipelines.yml을 연다.
변경하기 전에 빌드 작업을 간단히 살펴 보겠다. 빌드에는 네 단계가 필요하다. 먼저 배포 템플릿은 릴리즈 프로세스 중에 사용하기 위해 대상 폴더에 복사된다. 다음으로 프로젝트는 NPM으로 빌드된다. 그런 다음 빌드된 솔루션이 보관되고 최종적으로 릴리즈 파이프 라인이 액세스 할 수 있도록 게시된다. Visual Studio Code 용 Azure Pipelines 확장을 사용하면 IntelliSense 지원을 포함하여 훌륭한 YAML 편집 경험을 얻을 수 있다.
빠져있는 것은 파이프라인에서 테스트하는 것이다. 코드에 대한 단위 테스트가 이미 있다. 파이프라인에서 실행하면 된다. 테스트를 실행하고 결과 및 코드 적용 범위를 게시하는 태스크를 추가한다.
3. 모든 스텝을 제거하고 다음 코드로 바꾼다. Ctrl+S를 눌러 파일을 저장한다.
pool:
vmImage: ubuntu-16.04
trigger:
- master
steps:
- task: Npm@1
inputs:
command: 'custom'
customcommand: 'install --production'
- script: |
npm install
npm run build
npm test
displayName: 'Run unit tests'
continueOnError: true
- task: PublishTestResults@2
displayName: 'Publish Test Results'
condition: succeededOrFailed()
inputs:
testResultsFiles: $(System.DefaultWorkingDirectory)/test-report.xml
- task: PublishCodeCoverageResults@1
displayName: 'Publish Code Coverage'
condition: 'in(variables[''Agent.JobStatus''], ''Succeeded'')'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/*coverage.xml'
reportDirectory: $(System.DefaultWorkingDirectory)/coverage
- task: ArchiveFiles@2
displayName: 'Archive sources'
inputs:
rootFolderOrFile: $(Build.SourcesDirectory)
includeRootFolder: false
- task: CopyFiles@2
displayName: 'Copy ARM templates'
inputs:
SourceFolder: deployment
Contents: '*.json'
TargetFolder: $(build.artifactstagingdirectory)/Templates
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
4. Source Control 탭에서 Updated build pipeline과 같은 커밋 메시지를 입력하고 Ctrl+Enter를 눌러 커밋한다. 메시지가 표시되면 확인한다.
5. 창의 맨 아래에 있는 Synchronize Changes 버튼을 눌러 커밋을 서버로 푸시한다. 메시지가 표시되면 확인한다.
6. Azure DevOps로 돌아가 Pipelines → Pipelines로 이동한다. 빌드 파이프라인이 새 빌드를 시작했음을 알 수 있다.
앞에서 정의한 태스크를 수행하면서 각 스텝에서 진행중인 태스크를 실시간으로 파악할 수 있다. 빌드가 완료되면 프로세스의 일부로 수행된 로그와 모든 테스트를 검토 할 수 있다. 빌드 작업을 추적한다.
빌드를 따라 완료한다.
7. 빌드가 완료되었으므로 테스트 탭을 확인하여 게시된 테스트 결과를 확인해보자. Summary 섹션에서 총 테스트 수, 테스트 통과 백분율, 실패한 테스트 사례 등과 같은 정량적 지표를 얻을 수 있다.
결과에서 40개의 테스트가 모두 통과했음을 알 수 있다. 이는 변경 사항을 위반하지 않았으며 이 빌드는 배포에 적합한 후보라는 것을 의미한다.
8. Results 섹션에는 현재 빌드 또는 릴리즈의 일부로 실행 및 보고된 모든 테스트가 나열된다. 기본 보기에는 주의가 필요한 테스트에 집중하기 위해 실패 및 중단된 테스트만 표시된다. 그러나 제공된 필터를 사용하여 다른 결과를 선택할 수 있다.
9. 마지막으로 세부 정보 창을 사용하여 선택한 테스트 사례에 대한 추가 정보를 보고 오류 메시지, 스택 추적, 첨부 파일, 작업 항목, 기록 추세 등과 같은 문제 해결에 도움이 될 수 있다.
과제 5: Azure 파이프라인으로 CD 파이프라인 구성하기
빌드 파이프라인이 완성되고 모든 테스트가 통과되었으므로 릴리즈 파이프라인 생성에 주의를 기울일 수 있다.
빌드 템플릿과 마찬가지로 Azure에 게시하는 등 일반적인 배포 시나리오를 다루는 많은 패키지 옵션이 있다. 그러나 경험이 얼마나 유연하고 생산적인지를 설명하기 위해 빈 파이프라인에서 이 파이프라인을 구축 할 것이다.
1. 왼쪽 메뉴의 Pipelines 아래에서 Releases를 클릭한다. New Pipeline을 클릭하여 빌드에서 생성된 아티팩트를 배포할 새 CD 파이프라인을 작성한다.
2. Empty job을 클릭한다.
릴리즈 파이프라인에서 정의해야 할 첫 번째 항목은 정확히 무엇이 출시될 것이며 언제 출시될 것인가이다. 이 경우에는 빌드 파이프라인에서 생성된 결과물이다. 매일 밤마다 최신 빌드를 출시하려는 경우와 같이 일정을 지정할 수도 있다.
3. 연결된 아터팩트를 선택한다.
4. Source 를 이전에 작성된 빌드 파이프라인으로 설정하고 Default version을 Latest로 설정한다. 원하는 경우 소스 별칭을 “ContosoAir-CI” 같은 것으로 변경하고 Add를 클릭한다. 이는 릴리즈 파이프라인에 연결된 아터팩트를 고유하게 식별하는 식별자(일반적으로 짧은 이름)이다.
소스 커밋에서 시작하는 지속적인 통합과 마찬가지로 빌드 파이프라인이 완료되면 이 파이프라인이 자동으로 시작되도록 한다. 간단하다.
5. 아터팩트에서 Triggers 버튼을 클릭한다.
6. 지속적인 통합이 활성화되어 있지 않으면 Enable 한다.
또한 릴리즈 프로세스에 품질 게이트를 추가 할 수도 있다. 예를 들어, 특정 사용자 또는 그룹이 릴리즈를 계속하기 전에 승인하거나 배포 후 승인하도록 요구할 수 있다. 이 게이트는 Azure 그룹, REST API, 작업 항목 쿼리 등과 같은 동적 요소를 사용하여 게이트를 자동화하는 경우 필요한 그룹에 대한 알림과 폴링 지원을 제공한다. 우리는 여기서 추가하지 않겠지만 나중에 다시 돌아와서 쉽게 할 수 있다.
7. pre-deployment conditions 버튼을 클릭한다.
8. 배포 전 조건 옵션을 검토한다.
9. Variables 탭을 선택한다.
이 파이프라인에서는 여러 태스크에서 동일한 리소스 그룹을 지정해야 하므로 파이프라인 변수를 사용하는 것이 좋다. 리소스를 프로비저닝하려는 새 Azure 리소스 그룹을 위해 여기에 하나를 추가하겠다.
10. Azure 계정의 기존 리소스 그룹에서 현재 사용하지 않는 resourcegroup 변수를 Add 한다 (이 스크립트에서는 "contosoair"가 사용됨).
또한 빌드 파이프라인과 마찬가지로 릴리즈 파이프라인은 실제로 일련의 태스크이다. 즉시 사용 가능한 많은 태스크가 있으며 필요한 경우 직접 만들 수 있다. 릴리즈에 필요한 첫 번째 태스크는 Azure 배포 환경이 아직 없는 경우 설정하는 것이다. 태스크를 추가 한 후 배포하려는 Azure 계정에 대한 액세스 권한을 부여하고 리소스 그룹 이름에 대해 방금 지정한 변수 이름을 사용하도록 지시 할 수 있다.
11, Tasks 탭을 선택한다. Add task 버튼을 클릭한다.
12. “resource” 로 검색하고 Azure Resource Group Deployment 태스크를 Add 한다.
13. 새로 작성된 태스크를 선택한다.
14. Azure 구독을 선택하고 권한을 부여한다.
15. Resource group을 ”$(resourcegroup)”로 설정하고 Location을 선택한다.
웹앱을 호스팅하는데 필요한 Azure 리소스를 수동으로 만들지 않고 JSON의 환경을 설명하는 Azure Resource Manager 또는 ARM 템플릿을 정의했다. 이를 통해 다른 소스 파일과 마찬가지로 환경 정의를 업데이트하고 관리할 수 있다. 빌드 파이프라인 동안 템플릿 폴더에 복사한 파일이다. 필요한 경우 이 구성의 일부로 템플릿 매개 변수를 재정의할 수도 있다.
16. 아래에 설정을 입력한다.
찾아보기 탐색을 사용하여 가장 최근 빌드 출력에서 선택할 수 있다.
템플릿: $(System.DefaultWorkingDirectory)/_ContosoAir-CI/drop/Templates/azuredeploy.json
템플릿 파라미터: $(System.DefaultWorkingDirectory)/_ContosoAir-CI/drop/Templates/azuredeploy.parameters.json
또한 전역적으로 고유한 Azure 앱 서비스 이름을 생성하려면 Override template parameters를 설정해야 한다. 따라서 이름이 권장된다. 예를 들어, 이름이 John Doe인 경우 -p_environment johndoe와 같은 것을 사용한다. Azure에서 앱 서비스 이름의 일부로 사용되므로 지원되는 문자로 제한한다.
이 태스크가 완료되면 애플리케이션을 실행하는 데 필요한 리소스가 포함된 Azure 리소스 그룹이 생성된다. 그러나 ARM 템플릿은 변수를 일부 처리하여 입력 변수를 기반으로 리소스의 이름을 생성한다.이 변수는 향후 태스크에 사용할 수 있다. 이러한 변수를 잠재적으로 하드 코딩 할 수는 있지만 향후 변경이 있을 경우 문제가 발생할 수 있으므로 ARM 출력 작업을 사용하여 해당 값을 검색하여 파이프라인 변수에 넣는다. 이 태스크는 이전에 Visual Studio Marketplace에서 설치 한 타사 태스크다. 여기에는 Microsoft와 타사의 Azure DevOps에 대한 기타 확장이 포함되어 있다.
17. Add task 버튼을 클릭한다.
18. “arm” 으로 검색하여 ARM outputs 태스크를 추가한다.
19. 여기서 중요한 변수는 ARM 템플릿이 출력으로 지정한 앱 서비스의 이름이다. 이 태스크는 다음 태스크에서 "web" 변수로 사용할 수 있도록 채울 것이다.
마지막으로 앱 서비스를 배포 할 수 있다. 이전과 동일한 구독을 사용하고 배포하려는 앱 서비스의 이름으로 웹 변수를 지정한다. 이번에는 파이프라인에서 ARM Outputs 태스크에 의해 채워질 것이다. 또한 배포 할 슬롯을 지정할 수 있는 옵션이 있지만 이 데모에서는 다루지 않는다.
20. Add task 버튼을 클릭한다.
“app service”로 검색하고 Azure App Service Deploy 태스크를 Add 한다.
21. 새로 작성된 태스크를 선택한다.
22. 이전과 동일한 구독을 선택한다.
23. App Service name으로 ”$(web)”을 입력한다.
24. 파이프라인을 Save 한다.
25. Create a Release를 선택한다.
26. 새 릴리즈를 시작하려면 Create를 선택한다.
27. 나타나는 Release-1 링크를 클릭하여 릴리즈 요약으로 이동한다. In progress를 클릭하여 릴리즈 프로세스를 따른다.
28. 앱이 많은 초기 작업으로 인해 배포가 완료 되려면 몇 분 (초안 작성 시 약 5 분)이 소요됨에 유의한다.
29. 자세한 로그를 보려면 App Service Deploy 태스크를 선택한다. 게시된 웹 사이트의 URL을 여기에서 찾을 수 있다. 링크를 별도의 탭에서 열려면 Ctrl+Click을 클릭한다.
30. Contoso Air의 웹 페이지가 열린다.
'Azure와 함께 하는 DevOps' 카테고리의 다른 글
45. LaunchDarkly와 Azure Devops로 기능 플래그 관리 (0) | 2020.08.17 |
---|---|
44. Azure 보드와 GitHub 통합 (0) | 2020.08.10 |
42. Azure 파이프라인과 GitHub 통합 1편 (0) | 2020.07.27 |
41. Azure DevOps 서비스와 함께하는 Microsoft Teams (협업, 의사소통 및 축하) (0) | 2020.07.20 |
40. 파이프라인에서 Azure Key Vault의 시크릿 사용하기 (0) | 2020.07.13 |