개발자 블로그
Azure DevOps Pipeline - 5. git 체크아웃 속도 개선 본문
왜 느림?
- 왜 이렇게 많은 시간이 걸리는지 확인하기 위해 파이프라인 실행 결과를 살펴보겠습니다.
- 제목이 스포일러가 된 것 같은데.. 소스코드 체크아웃 하는 부분이 8분 31초나 걸리고 있습니다.
- 전체 런닝 타임이 12분 30초인걸 감안하면 거의 60% 정도의 시간이 여기에 소요된다는 것을 알 수 있습니다.
- 체크아웃 항목을 클릭하면 자세한 내용을 볼 수 있습니다.
- 주요 내용을 옮기면 대략 아래와 같습니다.
Receiving objects: 98% (28461/29041), 2.71 GiB | 5.79 MiB/s
Receiving objects: 99% (28751/29041), 2.71 GiB | 5.79 MiB/s
Receiving objects: 100% (29041/29041), 2.71 GiB | 6.08 MiB/s
Receiving objects: 100% (29041/29041), 2.71 GiB | 5.62 MiB/s, done.
...
* [new branch] target26 -> origin/target26
* [new branch] target29 -> origin/target29
* [new tag] 4.1.6-version -> 4.1.6-version
* [new tag] 4.1.7-version -> 4.1.7-version
- 네.. 그렇습니다. 모든 브랜치와 모든 태그.. Repository 전체를 통으로 다 받아오고 있습니다.
- 2.71GB나 되는 repo를 모두 가져오고 있으니 느릴 수 밖에 없습니다.
- 우리는 repo의 모든 내용이 필요한게 아닙니다.
- target branch의 최종 코드 형상만 있으면 됩니다.
- 우리에게 필요한 코드만 내려받도록 스크립트를 수정해보겠습니다.
git checkout 스크립트 추가
- 처음 파이프라인을 구축할 때 YAML로 해야 된다고 했던 것을 기억하시나요?
- YAML로 구축했다면 스크립트를 수정해서 체크아웃 속도를 개선 할 수 있습니다.
- 다시 파이프라인 스크립트를 보겠습니다.
trigger:
- azure-pipelines
pool:
vmImage: 'macos-latest'
steps:
- task: Gradle@2
inputs:
workingDirectory: ''
gradleWrapperFile: 'gradlew'
gradleOptions: '-Xmx3072m -Dorg.gradle.java.home=$(JAVA_HOME_11_X64)'
publishJUnitResults: false
testResultsFiles: '**/TEST-*.xml'
tasks: 'assembleMarketRelease appDistributionUploadMarketRelease'
- 스크립트에는 소스코드를 체크아웃하는 로직이 보이지 않습니다.
- 네, 이건 자동으로 생성되는 것 같네요.
- 근데 디폴트로 생성되는 코드가 전체 repo를 다 내려받도록 되어있다니.. 이건 좀..😢
- 이제 체크아웃 스크립트를 추가해 보겠습니다.
- 절차는 아래와 같습니다.
- checkout step을 무시(?)하는 스크립트 추가
- git checkout script 추가
- variables 추가
- 우선 1, 2번에 대해서 작업 완료 한 스크립트는 아래와 같습니다.
trigger:
- azure-pipelines
pool:
vmImage: 'macos-latest'
steps:
- checkout: none
- task: CmdLine@2
inputs:
script: |
echo git init $(Build.SourcesDirectory)
git init $(Build.SourcesDirectory)
echo git remote add origin https://$(REPOSITORY)
git remote add origin https://$(ACCESS)@$(REPOSITORY)
git config gc.auto 0
git config --get-all http.https://$(ACCESS)@$(REPOSITORY).extraheader
git config --get-all http.proxy
git config http.version HTTP/1.1
echo git fetch --progress --verbose --depth=1 origin azure-pipelines
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" fetch --force --progress --verbose --depth=1 origin azure-pipelines
git checkout --progress --force azure-pipelines
displayName: 'Checkout AppName@azure-pipelines'
...
- 1번에 해당되는 스크립트가 7~8 라인입니다.
- 2번에 해당되는 스크립트는 그 밑에 있는 CmdLine@2 task입니다.
- 여러 git 명령어들이 사용되었는데, 자세한 내용은 아래 링크를 참고하시기 바랍니다.
(아 뭐 물론 저는 길어서 읽어보지는 않았...;; 😛)
- 여러 git 명령어들이 사용되었는데, 자세한 내용은 아래 링크를 참고하시기 바랍니다.
✔ git - Documentation https://git-scm.com/doc |
- 그냥 위 스크립트를 무지성 copy & paste 하셔도 됩니다.
- 다만 "azure-pipelines"만 체크아웃 할 브랜치명으로 바꿔서 작성해주시면 됩니다.
- 참고로 "displayName"은 옵션 항목입니다. 지정해주면 파이프라인 각 단계가 실행 될 때 해당 값으로 표시가 됩니다.
- 스크립트 작성이 끝났으면, 스크립트에서 사용하는 변수들을 Variables에 입력해줘야 합니다.
Variables 추가
- 위 스크립트에서 사용한 아래 2개의 변수를 추가해줍니다.
- ACCESS
- REPOSITORY
- 변수 값은 Repos에서 Clone 버튼을 누르면 쉽게 확인이 가능합니다.
- 이 예제에서 사용한 repo url은 아래와 같습니다.
- https://team_name@dev.azure.com/team_name/app_name/_git/app_name
- 여기서 ACCESS는 빨간색으로 표기한 "team_name", REPOSITORY는 초록색으로 표기한 "dev.azure.com/team_name/app_name/_git/app_name"이 됩니다.
- 변수 추가가 완료 되었습니다.
- "Save" 버튼을 눌러서 모든 변경사항을 저장합니다.
- azure-pipelines.yml 파일이 업데이트 되면서 자동으로 파이프라인이 트리거 됩니다.
얼마나 빨라졌을까?
- 실행 결과를 확인해 보겠습니다.
- 튜닝 전, 후 비교표입니다.
튜닝 전 | 튜닝 후 | |
파일 사이즈 | 2.71GB | 34.77MB |
다운로드 시간 | 8분 31초 | 9초 |
- 이제야 쓸만한 빌드 파이프라인이 구축 된 것 같네요.
'프로그래밍 > DevOps' 카테고리의 다른 글
Azure DevOps Pipeline - 4. 배포 자동화 (0) | 2022.08.24 |
---|---|
Azure DevOps Pipeline - 3. YAML로 만들기 (0) | 2022.07.31 |
Azure DevOps Pipeline - 2. GUI(Classic Editor)로 만들기 (0) | 2022.07.31 |
Azure DevOps Pipeline - 1. 시작하기 (0) | 2022.07.31 |
Comments