다음을 통해 공유


파이프라인에서 변수 및 매개 변수를 안전하게 사용

Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020

변수와 매개 변수를 안전하게 활용하여 파이프라인 사용자로부터 입력을 수집하는 방법을 알아봅니다. 자세한 내용은 다음 문서를 참조하세요.

비밀 변수에 주의하세요. 비밀 변수를 설정하는 권장 방법에는 UI 사용, 변수 그룹 만들기 또는 Azure Key Vault에서 원본으로 사용하는 변수 그룹 활용이 포함됩니다. 자세한 내용은 비밀 변수 설정을 참조 하세요.

변수

변수는 사용자 입력을 선불로 수집하고 파이프라인 단계 간에 데이터 전송을 용이하게 하는 편리한 방법입니다. 그러나 변수를 사용할 때는 주의해야 합니다. 기본적으로 YAML에 정의되거나 스크립트된 변수에 관계없이 새로 만든 변수는 읽기/쓰기가 가능합니다. 다운스트림 단계에서는 변수 값을 예기치 않게 수정할 수 있습니다.

예를 들어 다음 스크립트 조각을 고려합니다.

msbuild.exe myproj.proj -property:Configuration=$(MyConfig)

이전 단계로 설정 MyConfig Debug & deltree /y c:하면 의도하지 않은 결과가 발생할 수 있습니다. 이 예제에서는 빌드 에이전트의 내용만 삭제하지만 이러한 설정의 잠재적 위험을 강조 표시합니다.

변수를 읽기 전용으로 만들 수 있습니다. 시스템 변수(예: Build.SourcesDirectory작업 출력 변수 및 큐 시간 변수)는 항상 읽기 전용입니다. YAML에서 만들거나 스크립트에서 런타임에 만든 변수는 읽기 전용으로 지정할 수 있습니다. 스크립트 또는 태스크가 새 변수를 만들 때 로깅 명령의 isReadonly=true 플래그를 전달하여 변수를 읽기 전용으로 만들 수 있습니다.

YAML에서 다음 특정 키를 사용하여 읽기 전용 변수를 지정할 수 있습니다.

variables:
- name: myReadOnlyVar
  value: myValue
  readonly: true

큐 시간 변수

파이프라인 UI 편집기에서 변수를 정의할 때 파이프라인 실행 중에 사용자가 해당 값을 재정의하도록 허용할 수 있습니다. 이러한 변수를 큐 시간 변수라고 하며 파이프라인 UI 편집기 내에서 항상 정의됩니다.

큐 시간 변수를 정의하는 스크린샷

큐 시간 변수는 파이프라인을 수동으로 실행할 때 최종 사용자에게 노출되며 해당 값을 변경할 수 있습니다. 큐 시간 변수의 값을 업데이트하는 스크린샷

사용자는 큐 시간에 설정된 변수를 지정하려면 파이프라인에 대한 큐 빌드 구성 편집 권한이 필요합니다.

큐 시간에 설정할 수 있는 변수 제한

파이프라인을 실행하는 데 사용되는 UI 및 REST API는 사용자가 큐 시간에 새 변수를 정의할 수 있는 수단을 제공합니다.

파이프라인을 실행하기 직전에 큐 시간 변수를 추가하는 스크린샷

Azure Pipelines 초기에 이 기능에는 다음과 같은 문제가 있었습니다.

  • 이를 통해 사용자는 정의에서 파이프라인 작성자가 아직 정의하지 않은 새 변수를 정의할 수 있습니다.
  • 사용자가 시스템 변수를 재정의할 수 있습니다.

이러한 문제를 해결하기 위해 큐 시간에 설정할 수 있는 변수를 제한하는 설정을 정의했습니다. 이 설정을 켜면 명시적으로 "큐 시간에 설정 가능"으로 표시된 변수만 설정할 수 있습니다. 즉, 이 설정을 설정하지 않는 한 큐 시간에 변수를 설정할 수 있습니다.

이 설정은 조직 및 프로젝트 수준에서 작동하도록 설계되었습니다.

  • 조직 수준:
    • 설정이 설정되면 조직 내의 모든 프로젝트에서 모든 파이프라인에 대해 명시적으로 "큐 시간에 설정 가능"으로 표시된 변수만 수정할 수 있도록 적용합니다.
    • 프로젝트 컬렉션 관리자는 이 설정을 사용하거나 사용하지 않도록 설정할 수 있습니다.
    • 조직 설정 파이프라인 설정에서 이 설정>에 액세스합니다.> 조직 수준에서 큐 시간으로 설정될 수 있는 제한 변수 스크린샷.
  • 프로젝트 수준:
    • 조직 수준과 마찬가지로 이 설정을 사용하면 특정 프로젝트 내의 모든 파이프라인에 대해 "큐 시간에 설정 가능"으로 표시된 변수만 수정할 수 있습니다.
    • 조직 수준 설정을 사용하도록 설정하면 모든 프로젝트에 적용되며 해제할 수 없습니다.
    • 프로젝트 관리자는 이 설정을 사용하거나 사용하지 않도록 설정할 수 있습니다.
    • 프로젝트 설정 파이프라인 설정에서 이 설정>에 액세스합니다.> 프로젝트 수준에서 큐 시간에 설정할 수 있는 변수를 제한하는 스크린샷

다음 예제에서는 설정이 켜지고 파이프라인이 큐 시간에 설정할 수 없는 변수 my_variable 를 정의합니다. 클래식 파이프라인에서 변수를 정의하는 스크린샷

다음으로, 파이프라인을 실행하려는 경우를 가정합니다. 변수 패널에는 변수가 표시되지 않으며 변수 추가 단추가 없습니다.

설정이 있는 변수 패널의 스크린샷

빌드 - 큐실행 - 파이프라인 REST API 호출을 사용하여 파이프라인 실행을 큐에 대기시키고 새 변수의 my_variable 값을 설정하면 다음과 유사한 오류가 발생합니다.

{
  "$id": "1",
  "innerException": null,
  "message": "You can't set the following variables (my_variable). If you want to be able to set these variables, then edit the pipeline and select Settable at queue time on the variables tab of the pipeline editor.",
  "typeName": "Microsoft.Azure.Pipelines.WebApi.PipelineValidationException, Microsoft.Azure.Pipelines.WebApi",
  "typeKey": "PipelineValidationException",
  "errorCode": 0,
  "eventId": 3000
}

매개 변수

변수와 달리 실행 중인 파이프라인은 파이프라인 매개 변수를 수정할 수 없습니다. 매개 변수에는 데이터 형식(예: numberstring)이 있으며 특정 값 하위 집합으로 제한될 수 있습니다. 이 제한은 파이프라인의 사용자 구성 가능한 측면이 미리 정의된 목록의 값만 허용하여 파이프라인이 임의 데이터를 허용하지 않도록 하는 경우에 유용합니다.

셸 작업 인수 매개 변수 유효성 검사 사용

파이프라인은 파이프라인 내에서 실행되는 작업을 참조할 수 있습니다. 일부 작업에는 arguments 작업에 대한 추가 옵션을 지정할 수 있는 매개 변수가 포함됩니다.

셸 작업 사용 인수 매개 변수 유효성 검사를 사용하도록 설정하면 인수 매개 변수는 셸이 세미콜론, 따옴표 및 괄호와 같은 문자를 올바르게 실행하는지 확인하기 위해 검토를 거칩니다. 큐 시간 옵션에서 설정할 수 있는 변수 제한과 마찬가지로 설정 파이프라인>설정에서> 조직 또는 프로젝트 수준에서 셸 작업 인수 매개 변수 유효성 검사를 사용하도록 구성할 수 있습니다.

이 기능을 켜면 매개 변수와 관련된 arguments 유효성 검사 문제가 다음과 같은 오류 메시지를 트리거합니다.

Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`).

이 문제를 해결하려면 오류 메시지에 표시된 대로 특수 문자를 이스케이프하여 인수를 조정합니다. 이 유효성 검사는 다음 특정 작업의 매개 변수에 적용됩니다 arguments .

  • PowerShell
  • BatchScript
  • Bash
  • Ssh
  • AzureFileCopy
  • WindowsMachineFileCopy

다음 단계