Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022
Azure Pipelines를 사용하여 Ruby 애플리케이션을 자동으로 빌드, 테스트 및 배포하는 방법을 알아봅니다.
필수 조건
Ruby는 Linux, macOS 및 Windows용 Microsoft 호스팅 에이전트 에 미리 설치됩니다. Ruby 프로젝트를 빌드하기 위해 더 이상 아무것도 설정할 필요가 없습니다. 사전 설치된 Ruby 버전을 보려면 Software를 참조하세요.
| 제품 | 요구 사항 |
|---|---|
| Azure DevOps | - Azure DevOps 프로젝트입니다. - Microsoft 호스팅 에이전트에서 파이프라인을 실행하는 기능입니다. 병렬 작업을 구매하거나 무료 등급을 요청할 수 있습니다. - YAML 및 Azure Pipelines에 대한 기본 지식 자세한 내용은 첫 번째 파이프라인 만들기를 참조하세요. - 권한: - 파이프라인을 만들려면 참가자 그룹에 있어야 하며 그룹에 빌드 파이프라인 만들기 권한이 허용으로 설정되어 있어야 합니다. 프로젝트 관리자 그룹의 구성원은 파이프라인을 관리할 수 있습니다. 서비스 연결 |
| 깃허브 | - GitHub 계정입니다. - Azure Pipelines에 권한을 부여하는 GitHub 서비스 연결. |
| 제품 | 요구 사항 |
|---|---|
| Azure DevOps | - Azure DevOps 프로젝트입니다. - Ruby가 설치된 자체 호스팅 에이전트입니다. 에이전트를 만들려면 자체 호스팅 에이전트를 참조하세요. - YAML 및 Azure Pipelines에 대한 기본 지식 자세한 내용은 첫 번째 파이프라인 만들기를 참조하세요. - 권한: - 파이프라인을 만들려면 참가자 그룹에 있어야 하며 그룹에 빌드 파이프라인 만들기 권한이 허용으로 설정되어 있어야 합니다. 프로젝트 관리자 그룹의 구성원은 파이프라인을 관리할 수 있습니다. 서비스 연결 |
| 깃허브 | - GitHub 계정입니다. - Azure Pipelines에 권한을 부여하는 GitHub 서비스 연결. |
Azure Pipelines 만들기
다음 단계에 따라 Ruby 앱에 대한 파이프라인을 설정합니다.
Azure DevOps 조직에 로그인하고, 프로젝트로 이동합니다.
파이프라인>새 파이프라인으로 이동합니다.
소스 코드의 위치로 GitHub를 선택합니다.
로그인할 GitHub로 리디렉션될 수 있습니다. 그렇다면 GitHub 자격 증명을 입력합니다.
Ruby 샘플 리포지토리를 선택합니다.
파이프라인용
Ruby템플릿을 선택하세요.YAML 파일이 생성됩니다. 저장 및 실행을 선택하고 >을 한 다음 저장 및 실행을 다시 선택합니다.
파이프라인 실행이 완료되기를 기다립니다. 일반적으로 기본 Ruby 프로젝트에는 2-5분이 걸립니다.
이제 코드 변경 내용을 푸시할 때 자동으로 실행되는 작업 YAML 파일(azure-pipelines.yml)이 리포지토리에 있습니다. 이 파일은 프로젝트의 특정 요구 사항에 맞게 사용자 지정할 수 있습니다.
팁 (조언)
이 문서에 설명된 YAML 파일을 변경하려면 파이프라인 페이지에서 파이프라인을 선택한 다음, 파일 편집 을 azure-pipelines.yml 선택합니다.
빌드 환경
Azure Pipelines를 사용하여 자체 인프라를 설정하지 않고도 Ruby 프로젝트를 빌드할 수 있습니다. Ruby는 Azure Pipelines의 Microsoft 호스팅 에이전트 에 미리 설치됩니다. Linux, macOS 또는 Windows 에이전트를 사용하여 빌드를 실행할 수 있습니다.
미리 설치된 정확한 Ruby 버전은 Microsoft 호스팅 에이전트를 참조하세요. Microsoft 호스팅 에이전트에 특정 버전의 Ruby를 설치하려면 파이프라인의 시작 부분에 Ruby 버전 사용 태스크를 추가합니다.
특정 Ruby 버전 사용
Ruby 버전 사용 태스크를 추가하여 파이프라인에서 Ruby 버전을 설정합니다. 이 코드 조각은 경로에 Ruby 3.4 이상을 추가하고 이를 사용하도록 후속 파이프라인 작업을 설정합니다. Microsoft 호스팅 에이전트에 사전 설치된 Ruby 버전을 확인하려면 Software를 참조하세요.
pool:
vmImage: 'ubuntu-latest'
steps:
- task: UseRubyVersion@0
inputs:
versionSpec: '>= 3.4'
addToPath: true
displayName: 'Set Ruby version'
Rails 설치
Rails를 설치하려면 파일에 다음 코드 조각을 추가합니다 azure-pipelines.yml .
- script: gem install rails && rails -v
displayName: 'Install Rails'
종속성 설치
Bundler를 사용하여 프로젝트의 gem 종속성을 설치합니다. 번들러는 Gemfile와 Gemfile.lock를 읽어 개발 환경에서와 동일한 gem 버전이 파이프라인에 설치되도록 보장합니다.
- script: |
gem install bundler
bundle install --retry=3 --jobs=4
displayName: 'Install dependencies with Bundler'
--retry=3 플래그는 실패한 설치를 최대 3회까지 재시도하며, --jobs=4를 사용하면 더 빠른 빌드를 위해 gem을 병렬로 설치할 수 있습니다.
레이크 실행
Gemfile에 정의된 대로 현재 번들의 컨텍스트에서 Rake를 실행하려면 다음 코드 조각을 azure-pipelines.yml 파일에 추가합니다.
- script: bundle exec rake
displayName: 'bundle exec rake'
테스트 결과 게시
샘플 코드에는 RSpec으로 작성된 단위 테스트가 포함됩니다. Rake가 이전 단계에서 실행되면 RSpec 테스트를 실행합니다. Rakefile의 RSpec RakeTask는 RspecJUnitFormatter를 사용하여 JUnit 스타일 결과를 생성하도록 구성됩니다.
테스트 결과 게시 태스크를 추가하여 JUnit 스타일 테스트 결과를 서버에 게시합니다.
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Ruby tests'
코드 검사 결과 게시
샘플 코드는 SimpleCov 를 사용하여 단위 테스트를 실행할 때 코드 검사 데이터를 수집합니다. SimpleCov는 Cobertura 및 HTML 보고서 포맷터를 사용하도록 구성됩니다.
코드 검사 결과 게시 태스크를 추가하여 코드 검사 결과를 서버에 게시합니다. 이렇게 하면 빌드 요약에서 검사 메트릭을 보고 추가 분석을 위해 HTML 보고서를 다운로드할 수 있습니다.
- task: PublishCodeCoverageResults@2
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'
failIfCoverageEmpty: true
전체 예제 파이프라인
다음은 이 문서에서 다루는 모든 개념을 보여 주는 전체 azure-pipelines.yml 파일입니다. 이 파이프라인:
- 메인 브랜치 변경에 대한 트리거
- 빌드 환경으로 Ubuntu 사용
- 지정된 Ruby 버전 설정
- 프로젝트 종속성을 설치합니다.
- Rake를 사용하여 테스트 실행
- 테스트 결과 및 코드 검사 메트릭을 게시합니다.
# Ruby pipeline example
trigger:
- main
pool:
vmImage: 'ubuntu-latest'
variables:
rubyVersion: '3.4.7'
steps:
- task: UseRubyVersion@0
inputs:
versionSpec: '$(rubyVersion)'
addToPath: true
displayName: 'Set Ruby version to $(rubyVersion)'
- script: |
gem install bundler
bundle install --retry=3 --jobs=4
displayName: 'Install dependencies'
- script: bundle exec rake
displayName: 'Run tests with Rake'
- task: PublishTestResults@2
condition: succeededOrFailed()
inputs:
testResultsFiles: '**/test-*.xml'
testRunTitle: 'Ruby tests'
displayName: 'Publish test results'
- task: PublishCodeCoverageResults@2
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
reportDirectory: '$(System.DefaultWorkingDirectory)/**/coverage'
failIfCoverageEmpty: true
displayName: 'Publish code coverage'