파이프라인 아티팩트 게시 및 다운로드

Azure DevOps Services

Azure Pipelines를 사용하여 파이프라인의 이전 단계 또는 다른 파이프라인에서 아티팩트 다운로드할 수 있습니다. 파일 공유에 아티팩트를 게시하거나 파이프라인 아티팩트로 사용할 수 있도록 할 수도 있습니다.

아티팩트 게시

YAML, 클래식 편집기 또는 Azure CLI를 사용하여 아티팩트 게시할 수 있습니다.

참고 항목

릴리스 파이프라인에서는 파이프라인 아티팩트 게시가 지원되지 않습니다.

steps:
- publish: $(System.DefaultWorkingDirectory)/bin/WebApp
  artifact: WebApp

참고 항목

publish 키워드(keyword) 파이프라인 아티팩트 게시 작업의 바로 가기입니다.

아티팩트의 이름은 선택 사항이지만 아티팩트의 내용을 정확하게 반영하는 이름을 지정하는 것이 좋습니다. 다른 OS에서 실행되는 작업에서 아티팩트를 사용하려는 경우 모든 파일 경로가 대상 환경에 유효한지 확인해야 합니다. 예를 들어 문자 \ 가 포함된 파일 이름이거나 * Windows에서 다운로드하지 못합니다.

게시하려는 파일/폴더의 경로가 필요합니다. 이는 절대 경로 또는 에 대한 상대 경로 $(System.DefaultWorkingDirectory)일 수 있습니다.

Azure Artifacts의 패키지는 변경할 수 없습니다. 패키지를 게시하면 해당 버전이 영구적으로 예약됩니다. 패키지가 게시된 경우 실패한 작업을 다시 실행하면 실패합니다. 오류 패키지가 이미 존재하지 않고 실패한 작업을 다시 실행할 수 있도록 하려면 이전 작업이 성공한 경우에만 조건을 사용하여 실행하는 것이 좋습니다.

  jobs:
  - job: Job1
    steps:
      - script: echo Hello Job1!

  - job: Job2
    steps:
      - script: echo Hello Job2!
    dependsOn: Job1

참고 항목

파이프라인 아티팩트 저장에 대한 요금은 청구되지 않습니다. 파이프라인 캐싱도 스토리지 청구에서 제외됩니다. 내 총 청구 스토리지에 계산되는 아티팩트 수를 확인합니다.

주의

파이프라인 실행을 삭제하면 해당 실행과 연결된 모든 아티팩트가 삭제됩니다.

.artifactignore 사용

.artifactignore 는 아티팩트를 게시할 때 무시해야 하는 파일을 지정하는 .gitignore 데 유사한 구문을 사용합니다(몇 가지 제한 사항 포함). .artifactignore 파일이 파이프라인 아티팩트 게시 태스크targetPath 인수로 지정된 디렉터리 내에 있는지 확인합니다.

참고 항목

더하기 기호 문자 + 는 URL 경로에서 지원되지 않으며 일부는 Maven과 같은 패키지 형식에 대한 메타데이터를 빌드합니다.

: .exe 파일을 제외한 모든 파일 무시:

**/*
!*.exe

Important

.artifactignore 파일이 없는 경우 Azure Artifacts는 .git 폴더 경로를 자동으로 무시합니다. 빈 .artifactignore 파일을 만들어 이를 무시할 수 있습니다.

아티팩트 다운로드

YAML, 클래식 편집기 또는 Azure CLI를 사용하여 아티팩트 다운로드할 수 있습니다.

steps:
- download: current
  artifact: WebApp
  • current: 현재 파이프라인 실행에서 생성된 아티팩트 다운로드 옵션: 현재, 특정.

참고 항목

게시된 아티팩트 목록은 다음 의존 작업에서만 사용할 수 있습니다. 따라서 아티팩트 게시 작업이 있는 작업에 종속된 별도의 작업에서만 옵션을 사용합니다 current .

파이프라인 리소스를 사용하여 원본을 한 곳에서 정의하고 파이프라인의 어디에서나 사용할 수 있습니다.

참고 항목

download 키워드(keyword) 아티팩트가 다운로드됩니다. 자세한 내용은 steps.download를 참조 하세요.

조직 내의 다른 프로젝트에서 파이프라인 아티팩트를 다운로드하려면 다운스트림 프로젝트와 다운스트림 파이프라인 모두에 대해 적절한 권한이 구성되어 있는지 확인합니다. 기본적으로 파일은 $(Pipeline.Workspace)에 다운로드됩니다. 아티팩트 이름을 지정하지 않으면 다운로드한 각 아티팩트마다 하위 디렉터리가 만들어집니다. 일치하는 패턴을 사용하여 다운로드할 파일을 제한할 수 있습니다. 자세한 내용은 파일 일치 패턴을 참조하세요.

steps:
- download: current
  artifact: WebApp
  patterns: |
    **/*.js
    **/*.zip

아티팩트 선택

단일 다운로드 단계에서 하나 이상의 아티팩트를 다운로드할 수 있습니다. 여러 아티팩트 다운로드를 위해 아티팩트 이름 필드를 비워 두고 파일 일치 패턴을 사용하여 다운로드할 파일을 제한합니다. ** 는 기본 파일 일치 패턴입니다(모든 아티팩트에서 모든 파일).

단일 아티팩트

아티팩트 이름을 지정하는 경우:

  1. 해당 특정 아티팩트용 파일만 다운로드됩니다. 아티팩트가 없으면 작업이 실패합니다.

  2. 파일 일치 패턴은 아티팩트 루트를 기준으로 평가됩니다. 예를 들어 패턴 *.jar 은 아티팩트 루트에 확장이 있는 .jar 모든 파일을 일치합니다.

다음 예제에서는 아티팩WebApp트에서 모든 *.js 항목을 다운로드하는 방법을 보여 줍니다.

steps:
- download: current
  artifact: WebApp
  patterns: '**/*.js'

여러 아티팩트

아티팩트 이름이 지정되지 않은 경우:

  1. 여러 아티팩트가 다운로드될 수 있으며 파일이 없으면 작업이 실패하지 않습니다.

  2. 각 아티팩트마다 하위 디렉터리가 만들어집니다.

  3. 파일 일치 패턴은 패턴의 첫 번째 세그먼트가 아티팩트 이름과 일치한다고 가정해야 합니다. 예를 들어 아티팩트 WebApp/** 에서 모든 파일을 일치합니다 WebApp . 패턴 */*.dll 은 각 아티팩트 루트에 확장명의 .dll 모든 파일을 일치합니다.

다음 예제에서는 모든 아티팩트에서 모든 .zip 파일을 다운로드하는 방법을 보여 줍니다.

steps:
- download: current
  patterns: '**/*.zip'

릴리스 및 배포 작업의 아티팩트

아티팩트만 배포 작업에서 자동으로 다운로드됩니다. 기본적으로 아티팩트가 .에 $(Pipeline.Workspace)다운로드됩니다. 배포에서 수명 주기 후크를 사용하는 deploy 경우에만 아티팩트 다운로드 작업이 자동으로 삽입됩니다. 아티팩트가 자동으로 다운로드되지 않도록 하려면 단계를 추가하고 download 해당 값을 none으로 설정합니다. 일반 빌드 작업에서는 단계 키워드(keyword) 또는 파이프라인 아티팩트 다운로드 태스크를 명시적으로 사용해야 download 합니다. 다른 유형의 후크에 대한 자세한 내용은 수명 주기 후크를 참조하세요.

steps:
- download: none

여러 단계에서 아티팩트 사용

파이프라인의 여러 단계에서 아티팩트에 액세스할 수 있게 하려면 이제 한 단계에서 아티팩트를 게시한 다음, 종속성을 활용하여 다음 단계에서 다운로드할 수 있습니다. 자세한 내용은 단계별 종속성을 참조하세요.

예시

다음 예제에서는 리포지토리에서 스크립트 폴더를 복사하여 게시합니다 $(Build.ArtifactStagingDirectory). 두 번째 단계에서는 스크립트를 다운로드하고 실행합니다.

trigger:
- main
stages:
- stage: build
  jobs:
  - job: run_build
    pool:
      vmImage: 'windows-latest'
    steps:
    - task: VSBuild@1
      inputs:
        solution: '**/*.sln'
        msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactStagingDirectory)\WebApp.zip" /p:DeployIisAppPath="Default Web Site"'
        platform: 'Any CPU'
        configuration: 'Release'

    - task: CopyFiles@2
      displayName: 'Copy scripts'
      inputs:
        contents: 'scripts/**'
        targetFolder: '$(Build.ArtifactStagingDirectory)'

    - publish: '$(Build.ArtifactStagingDirectory)/scripts'
      displayName: 'Publish script'
      artifact: drop

- stage: test
  dependsOn: build
  jobs:
  - job: run_test
    pool:
      vmImage: 'windows-latest'
    steps:
    - download: current
      artifact: drop
    - task: PowerShell@2
      inputs:
        filePath: '$(Pipeline.Workspace)\drop\test.ps1'

Screenshot showing the PowerShell task output

빌드 아티팩트에서 마이그레이션

파이프라인 아티팩트가 차세대 빌드 아티팩트이며 아티팩트 작업을 수행하는 데 권장되는 방법입니다. 빌드 아티팩트 게시 작업을 사용하여 게시된 아티팩트도 빌드 아티팩트 다운로드를 사용하여 다운로드할 수 있지만 대신 최신 파이프라인 아티팩트 다운로드 작업을 사용하는 것이 좋습니다.

빌드 아티팩트에서 파이프라인 아티팩트로 마이그레이션하는 경우:

  1. 기본적으로 파이프라인 아티팩트 다운로드 작업은 파일을 다운로드합니다 $(Pipeline.Workspace). 모든 아티팩트 유형에 대한 기본 및 권장 경로입니다.

  2. 빌드 아티팩트 다운로드 태스크에 대한 파일 일치 패턴은 특정 아티팩 트를 지정했는지 여부에 관계없이 아티팩트 이름으로 시작하거나 일치해야 합니다. 파이프라인 아티팩트 다운로드 태스크에서 아티팩트 이름이 이미 지정된 경우 패턴에 아티팩트 이름이 포함되지 않아야 합니다. 자세한 내용은 단일 아티팩트 선택을 참조 하세요.

예시

- task: PublishPipelineArtifact@1
  displayName: 'Publish pipeline artifact'
  inputs:
    targetPath: '$(Pipeline.Workspace)'
    ${{ if eq(variables['Build.SourceBranchName'], 'main') }}:
        artifact: 'prod'
    ${{ else }}:
        artifact: 'dev'
    publishLocation: 'pipeline'
  • targetPath: (필수) 게시할 파일 또는 디렉터리의 경로입니다. 절대 또는 기본 작업 디렉터리를 기준으로 할 수 있습니다. 변수를 포함 수 있지만 wild카드는 지원되지 않습니다. 기본값: $(Pipeline.Workspace).

  • publishLocation: (필수) 아티팩트 게시 위치입니다. Azure Pipelines에 아티팩트를 저장할지 또는 파이프라인 에이전트에서 액세스할 수 있어야 하는 파일 공유에 복사할지를 선택합니다. 옵션: pipeline, filepath. 기본값: 파이프라인.

  • 아티팩트: (선택 사항) 게시할 아티팩트 이름입니다. 설정하지 않으면 기본적으로 작업 범위가 지정된 고유 ID로 설정됩니다.

FAQ

Q: 빌드 아티팩트가란?

A: 빌드 아티팩트가 빌드에서 생성된 파일입니다. 빌드 아티팩트 게시 및 사용 방법에 대한 자세한 내용은 빌드 아티팩트(Build Artifacts)를 참조하세요.

Q: 실패한 작업을 다시 실행할 때 파이프라인 아티팩트 삭제할 수 있나요?

A: 파이프라인 아티팩트는 삭제할 수 없거나 덮어쓸 수 없습니다. 실패한 작업을 다시 실행할 때 아티팩트를 다시 생성하려는 경우 아티팩트 이름에 작업 ID를 포함할 수 있습니다. $(system.JobId) 는 이 용도에 적합한 변수입니다. 미리 정의된 변수에 대한 자세한 내용은 시스템 변수를 참조하세요.

Q: 방화벽 뒤의 아티팩트 피드에 액세스하려면 어떻게 해야 하나요?

A: 조직에서 방화벽 또는 프록시 서버를 사용하는 경우 Azure Artifacts Do기본 URL 및 IP 주소를 허용해야 합니다.