2022. 7. 21. 16:39ㆍTIL💡/Others
요즘 DevOps 관련된 곳에서 YAML 파일을 자주 사용하는데, 여전히 방법을 잘 몰라서 조금씩 정리를 해보고 있다.
그리고 이번에 맡은 task가 파이프라인 상에서 코드 커버리지를 올리는 일이기에 익숙해져야 했다.
파이프라인은 YAML 파일을 통해 정의된다. 주로 이 파일은 azure-pipelines.yml이며, 레포의 root에 위치한다.
YAML 파일의 내용을 같이 보자.
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Maven@3
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx3072m'
javaHomeOption: 'JDKVersion'
jdkVersionOption: '1.11'
jdkArchitectureOption: 'x64'
publishJUnitResults: false
testResultsFiles: '**/surefire-reports/TEST-*.xml'
goals: 'package'
이 파이프라인은 팀이 change를 main 브랜치에 push하거나 PR을 생성할 때 언제든지 실행된다.
이는 Microsoft-hosted Linux machine에서 실행되고, 이 파이프라인 프로세스는 Maven task를 실행하는 하나의 step을 가지고 있다.
Change the platform to build on
우리는 이미 SDK와 도구들이 포함된 Microsoft-hosted agent에 프로젝트를 빌드할 수 있다. 아니면 self-hosted agent를 사용할 수도 있다.
pool:
vmImage: 'windows-latest'
Add steps
우리는 더 많은 scripts나 tasks를 pipeline에 step으로 추가할 수 있다.
task는 미리 패키징된 스크립트이다.
우리는 task를 사용해 어플리케이션을 빌드, 테스트, 퍼블리시, 그리고 배포까지할 수 있다.
Java에서 우리가 사용한 Maven task는 테스트하고 결과를 퍼블리시하며, 우리는 코드 커버리지 결과 또한 퍼블리시하는 데 task를 사용할 수 있다.
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: "JaCoCo"
summaryFileLocation: "$(System.DefaultWorkingDirectory)/**/site/jacoco/jacoco.xml"
reportDirectory: "$(System.DefaultWorkingDirectory)/**/site/jacoco"
failIfCoverageEmpty: true
Build across multiple platforms
우리는 프로젝트를 여러 플랫폼에 빌드하고 테스트할 수 있다. 이를 위한 방법 중 하나로 strategy와 matrix를 사용하는 방법이 있다.
우리는 variable을 사용해 편리하게 데이터를 다양한 부분에 입력시킬 수 있다. 예를 들어 아래와 같이 우리가 사용하고 싶은 image의 이름을 전달할 수 있다. 이렇게 실행하면 우리는 3개의 job을 각각 다른 플랫폼에서 실행해볼 수 있다.
strategy:
matrix:
linux:
imageName: "ubuntu-latest"
mac:
imageName: "macOS-latest"
windows:
imageName: "windows-latest"
maxParallel: 3
pool:
vmImage: $(imageName)
Build using multiple versions
프로젝트를 언어의 다른 버전을 이용해 빌드하기 위해서는 matrix와 variable를 사용할 수 있다.
💡 NOTE
strategy를 하나의 context에서 여러 번 사용할 수 없다.
만약 하나의 플랫폼에서 여러 버전을 빌드하고 싶다면, vmImage 다음에 Maven task를 작성하기 이전에 matrix를 아래와 같이 입력하라.
strategy:
matrix:
jdk10:
jdkVersion: "1.10"
jdk11:
jdkVersion: "1.11"
maxParallel: 2
그리고 maven task를
jdkVersionOption: "1.11"
에서 아래와 같이 변경하라.
jdkVersionOption: $(jdkVersion)
만약 여러 플랫폼에서 각기 다른 버전을 빌드하고 싶다면, yml 파일의 전체 내용을 아래와 같이 교체하라.
trigger:
- main
strategy:
matrix:
jdk10_linux:
imageName: "ubuntu-latest"
jdkVersion: "1.10"
jdk11_windows:
imageName: "windows-latest"
jdkVersion: "1.11"
maxParallel: 2
pool:
vmImage: $(imageName)
steps:
- task: Maven@3
inputs:
mavenPomFile: "pom.xml"
mavenOptions: "-Xmx3072m"
javaHomeOption: "JDKVersion"
jdkVersionOption: $(jdkVersion)
jdkArchitectureOption: "x64"
publishJUnitResults: true
testResultsFiles:"**/TEST-*.xml"
goals: "package"
Customize CI triggers
파이프라인 트리거는 파이프라인이 실행하는 것을 유발한다.
우리는 브랜치에 업데이트를 push할 때마다 trigger:
로 파이프라인을 실행한다.
YAML 파이프라인은 기본적으로 디폴트 브랜치에 트리거되도록 구성되어있다.
우리는 트리거를 특정한 브랜치나 PR 검증에 실행되도록 셋업 가능하다. PR 검증에는 단지 trigger:가 아니라 pr:로 교체하면된다.
기본적으로 파이프라인은 매 PR 변화때마다 실행된다.
pr:
- main
- releases/*
우리는 구체적으로 풀네임으로도 가능하고, 와일드카드로도 브랜치 지칭이 가능하다.
Pipeline settings
YAML 파일에서 관리되지 않는 파이프라인 설정이 있다. 예를 들어 YAML 파일의 위치나 파이프라인 활성화 상태 같은 것들이다.
이러한 설정들을 구성하기 위해서는 pipeline details page로 가서 More actions를 선택하면 된다.
https://docs.microsoft.com/en-us/azure/devops/pipelines/customize-pipeline?view=azure-devops
https://docs.microsoft.com/en-us/azure/devops/pipelines/ecosystems/python?view=azure-devops
'TIL💡 > Others' 카테고리의 다른 글
[Visual Studio] 단축키 정리 (0) | 2022.10.09 |
---|---|
[병렬화] 병렬 프로그래밍이란? (0) | 2022.10.02 |
C#을 통해 배우는 동시성 프로그래밍 Part 1. (0) | 2022.05.17 |
git 최초 push 시 왜 --set-upstream 옵션을 설정해야할까? (0) | 2022.04.19 |
HTTPS vs. HTTP (0) | 2021.10.25 |