파일 복사 작업

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020 | 2019년 Azure DevOps Server | TFS 2018

일치 패턴을 사용하여 원본 폴더에서 대상 폴더로 파일을 복사하려면 이 작업을 사용합니다.

참고

Microsoft TFS(Team Foundation Server) 2018 이하 버전에서 빌드 및 릴리스 ‘파이프라인’은 ‘정의’라고 하며 ‘실행’은 ‘빌드’, ‘서비스 연결’은 ‘서비스 엔드포인트’, ‘스테이지’는 ‘환경’, ‘작업’은 ‘단계’라고 합니다.

요청

없음

YAML 코드 조각

# Copy files
# Copy files from a source folder to a target folder using patterns matching file paths (not folder paths)
- task: CopyFiles@2
  inputs:
    #sourceFolder: # Optional
    #contents: '**' 
    targetFolder: 
    #cleanTargetFolder: false # Optional
    #overWrite: false # Optional
    #flattenFolders: false # Optional
    #preserveTimestamp: false # Optional
    #retryCount: 0 # Optional
    #ignoreMakeDirErrors: false # Optional

인수

인수 설명
SourceFolder
원본 폴더
(선택 사항) 복사할 파일이 들어 있는 폴더입니다. 비워 두면 리포지토리의 루트 폴더에서 복사가 수행됩니다(지정한 $(Build.SourcesDirectory)것과 동일).
빌드에서 원본 디렉터리 외부에서 아티팩트가 생성되는 경우 파이프라인에 대해 만든 디렉터리에서 파일을 복사하도록 지정 $(Agent.BuildDirectory) 합니다.
Contents
콘텐츠
(필수) 복사본의 일부로 포함할 파일 경로입니다. 여러 줄의 일치 패턴을 지원합니다.
다음은 그 예입니다.
  • * 는 지정된 원본 폴더의 모든 파일을 복사합니다.
  • ** 는 지정된 원본 폴더의 모든 파일과 모든 하위 폴더의 모든 파일을 복사합니다.
  • **\bin\** 는 모든 bin 폴더에서 모든 파일을 재귀적으로 복사합니다.

    이 패턴은 폴더 경로가 아닌 파일 경로만 일치하도록 사용됩니다. 따라서 **\bin 대신 **\bin\**과 같은 패턴을 지정해야 합니다.
    빌드 에이전트 유형과 일치하는 경로 구분 기호를 사용해야 합니다. 예를 들어 Linux 에이전트에 사용해야 합니다. 아래에는 더 많은 예제가 나와 있습니다.
    기본값: **
TargetFolder
대상 폴더
(필수) 대상 폴더 또는 UNC 경로 파일이 복사됩니다. 변수를 사용할 수 있습니다.
예: $(build.artifactstagingdirectory)
CleanTargetFolder
대상 폴더 정리
(선택 사항) 복사하기 전에 대상 폴더의 모든 기존 파일 삭제
기본값: false
OverWrite
Overwrite
(선택 사항) 대상 폴더의 기존 파일 바꾸기
기본값: false
flattenFolders
폴더 평면화
(선택 사항) 폴더 구조를 평면화하고 모든 파일을 지정된 대상 폴더에 복사합니다.
기본값: false
preserveTimestamp
대상 타임스탬프 유지
(선택 사항) 원래 원본 파일을 사용하여 대상 파일 타임스탬프를 유지합니다.
기본값: false
retryCount
파일 복사를 위해 다시 시도 횟수
(선택 사항) 파일을 복사할 재시도 횟수를 지정합니다. 원격 호스트의 UNC 대상 경로와 같은 일시적인 문제를 해결하는 데 도움이 될 수 있습니다.
기본값: 0
ignoreMakeDirErrors
대상 폴더를 만드는 동안 오류 무시
(선택 사항) 이 기능은 하나의 대상 폴더가 있는 여러 에이전트가 작업을 병렬로 실행하는 문제를 방지하는 데 유용할 수 있습니다.
기본값: false

참고

일치하는 파일이 없으면 작업은 여전히 성공을 보고합니다. 일치하는 파일이 대상 폴더에 이미 있는 경우 덮어쓰기 매개 변수가 true로 설정되지 않은 한 태스크에서 경고를 보고하고 실행을 계속합니다.

steps:
- task: CopyFiles@2
  inputs:
    contents: '_buildOutput/**'
    targetFolder: $(Build.ArtifactStagingDirectory)
- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: $(Build.ArtifactStagingDirectory)
    artifactName: MyBuildOutputs

예제

실행 파일 및 추가 정보 파일 복사

목표

이 C# 콘솔 앱을 실행하는 데 필요한 추가 정보 및 파일만 복사하려고 합니다.

`-- ConsoleApplication1
    |-- ConsoleApplication1.sln
    |-- readme.txt
    `-- ClassLibrary1
        |-- ClassLibrary1.csproj
    `-- ClassLibrary2
        |-- ClassLibrary2.csproj
    `-- ConsoleApplication1
        |-- ConsoleApplication1.csproj

참고

ConsoleApplication1.sln 에는 .dll 및 .exe 파일이 있는 bin 폴더가 포함되어 있습니다. 이동되는 항목을 보려면 아래 결과를 참조하세요.

변수 탭 $(BuildConfiguration) 에서 .로 release설정됩니다.

여러 일치 패턴이 있는 예제:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\ConsoleApplication1\bin\**\*.exe
      ConsoleApplication1\ConsoleApplication1\bin\**\*.dll
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

OR 조건이 있는 예제:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\ConsoleApplication1\bin\**\?(*.exe|*.dll)
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

NOT 조건이 있는 예제:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    Contents: |
      ConsoleApplication1\**\bin\**\!(*.pdb|*.config)
      !ConsoleApplication1\**\ClassLibrary*\**
      ConsoleApplication1\readme.txt
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

콘텐츠 섹션에 변수가 있는 예제

- task: CopyFiles@2
  inputs:
    Contents: '$(Build.Repository.LocalPath)/**' 
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

YAML 빌드는 아직 TFS에서 사용할 수 없습니다.

결과

이러한 파일은 스테이징 디렉터리에 복사됩니다.

`-- ConsoleApplication1
    |-- readme.txt
    `-- ConsoleApplication1
        `-- bin
            `-- Release
                | -- ClassLibrary1.dll
                | -- ClassLibrary2.dll
                | -- ConsoleApplication1.exe

.git 폴더를 제외한 원본 디렉터리에서 모든 항목 복사

여러 일치 패턴이 있는 예제:

steps:
- task: CopyFiles@2
  displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
  inputs:
    SourceFolder: '$(Build.SourcesDirectory)'
    Contents: |
      **/*
      !.git/**/*
    TargetFolder: '$(Build.ArtifactStagingDirectory)'

YAML 빌드는 아직 TFS에서 사용할 수 없습니다.

오픈 소스

이 작업은 GitHub에서 오픈 소스. 피드백과 기여를 환영합니다.

FAQ

파일 일치 패턴에 대한 자세한 내용은 어디에서 확인할 수 있나요?

파일 일치 패턴 참조

이 작업을 사용하여 아티팩트 게시를 어떻게 할까요??

Azure Pipelines의 아티팩트 참조

Q: 아티팩트 게시에 문제가 있습니다. 자세한 로그를 보려면 어떻게 해야 하나요?

파이프라인에 대한 자세한 로그를 사용하도록 설정하려면 다음을 수행합니다.

  1. 파이프라인 편집 및 변수 선택
  2. 이름과 System.Debug 값을 사용하여 새 변수 추가 true
  3. 저장

Q: 어떤 변수를 사용할 수 있나요?

A: $(Build.SourcesDirectory)$(Agent.BuildDirectory) 파이프라인에서 사용할 수 있는 변수는 몇 가지에 불과합니다. 변수는 또는 스크립트로 사용할 수 있습니다.

다양한 변수 형식에 대해 알아보려면 변수 정의, 미리 정의된 변수및 클래식 릴리스 및 아티팩트 변수를 참조하세요.

Q: 작업을 통해 yaml 파이프라인의 배포 작업에서 아티팩트 게시를 할 수 있지만 다운스트림 파이프라인에서 사용할 수 없나요?

A: 배포 작업에는 원본 분기의 컨텍스트가 없으므로 아티팩트를 게시하는 데 적합하지 않습니다. 주로 아티팩트 사용으로 설계되었습니다. 해결 방법은 해당 논리를 별도의 작업(배포 작업에 대한 종속성 포함)으로 격리하는 것입니다.

에이전트가 필요한가요?

빌드 또는 릴리스를 실행하려면 하나 이상의 에이전트가 필요합니다.

문제가 있습니다. 문제를 어떻게 해결할 수 있나요?

빌드 및 릴리스 문제 해결을 참조하세요.

기본 에이전트 풀을 선택할 수 없으며 빌드 또는 릴리스를 큐에 넣을 수 없습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

에이전트 풀을 참조하세요.

“오류: 로컬 발급자 인증서를 가져올 수 없습니다.” 오류로 인해 NuGet 푸시 작업이 실패합니다. 이 문제를 어떻게 해결할 수 있나요?

이 문제는 신뢰할 수 있는 루트 인증서를 추가하여 해결할 수 있습니다. NODE_EXTRA_CA_CERTS=file 환경 변수를 빌드 에이전트에 추가하거나 NODE.EXTRA.CA.CERTS=file 작업 변수를 파이프라인에 추가할 수 있습니다. 이 변수에 대한 자세한 내용은 Node.js 설명서를 참조하세요. 파이프라인에서의 변수를 설정하는 방법은 파이프라인에서 변수 설정을 참조하세요.

TFS 온-프레미스를 사용하고 있지만 일부 기능이 표시되지 않습니다. 이유는 무엇입니까?

일부 기능은 Azure Pipelines에서만 사용할 수 있으며 온-프레미스에서는 아직 사용할 수 없습니다. 최신 버전의 TFS로 업그레이드한 경우 일부 기능을 온-프레미스에서 사용할 수 있습니다.