애저 데브옵스 파이프라인에서 사용자 환경 변수를 설정하고 읽는 방법은 무엇입니까?
로컬 컴퓨터에 저장된 환경 변수에서 다음과 같은 값을 읽는 테스트 자동화 코드가 있습니다.
Environment.GetEnvironmentVariable("SAUCE_USERNAME", EnvironmentVariableTarget.User);
파이프라인 실행 중에 Azure Pipeline을 사용하여 이 변수를 생성한 다음 테스트 자동화 코드에서 읽으려고 합니다.YAML 파일 사용.
Azure Pipeline의 VS Test 단계에서 이 변수를 읽고 있습니다.제가 변수를 설정한다면, 그것은 애저 파이프라인의 수명을 위한 것이어야 합니다.
저는 여기에 있는 설명서를 사용하려고 했지만 실패했습니다.
아래 코드도 시도했지만 실패하고 다음 오류가 발생합니다.
azure-pipelines.yml(라인: 39, 콜: 1, Idx: 1252) - (라인: 39, 콜: 1, Idx: 1252):단순 키를 검색하는 동안 필요한 ':'을(를) 찾을 수 없습니다.
# Create a secret variable
- powershell: |
Write-Host '##vso[task.setvariable variable=sauce.userName;issecret=true]abc'
# Attempt to output the value in various ways
- powershell: |
# Using an input-macro:
Write-Host "This works: $(sauce.userName)"
# Using the env var directly:
Write-Host "This does not work: $env:SAUCE_USERNAME"
# Using the mapped env var:
Write-Host "This works: $env:SAUCE_USERNAME"
env:
SAUCE_USERNAME: $(sauce.userName)
가장 쉬운 방법은 다음과 같이 Azure DevOps(ADO) EnvVariable 값을 키에 전달하는 것입니다.
- task: DotNetCoreCLI@2
displayName: 'Run tests'
env:
SAUCE_USERNAME: $(sauceUsername) #this will store the value from 'sauceUsername' into SAUCE_USERNAME
SAUCE_ACCESS_KEY: $(sauceKey)
값을 표시하거나 사용하는 것은 시도할 때 작동합니다.
- bash: echo $(SAUCE_USERNAME) # will output our username stored in SAUCE_USERNAME env variable
그리고 만약 당신이 언급하고 있다면.SAUCE_USERNAME
코드에서 코드는 Azure 서버에서 값을 픽업합니다.
이전에도 Powershell을 사용했지만 이 방법이 더 많이 사용되고 복잡합니다.
- Azure DevOps 파이프라인에서 변수를 만들고 해당 변수에 값을 제공합니다.
- 처음에 실행하여 환경 변수를 설정할 Powershell 스크립트를 만듭니다.이것이 제 포쉬의 모습입니다.
- 처음에 이 Posh를 CI 파이프라인의 별도 단계로 실행하면 파이프라인을 실행하는 데 사용되는 VM의 환경 변수가 설정됩니다.
이것은 당신에게 도움이 될 수 있는 또 다른 상세한 기사입니다.
요청에 따라 이를 가능하게 하는 PowerShell 코드도 첨부합니다.
Param(
[string]$sauceUserName,
[string]$sauceAccessKey,
[string]$sauceHeadlessUserName,
[string]$sauceHeadlessAccessKey
)
Write-Output "sauce.userName that was passed in from Azure DevOps=>$sauceUserName"
Write-Output "sauce.accessKey that was passed in from Azure DevOps=>$sauceAccessKey"
Write-Output "sauce.headless.userName that was passed in from Azure DevOps=>$sauceHeadlessUserName"
Write-Output "sauce.headless.access.key that was passed in from Azure DevOps=>$sauceHeadlessAccessKey"
[Environment]::SetEnvironmentVariable("SAUCE_USERNAME", "$sauceUserName", "User")
[Environment]::SetEnvironmentVariable("SAUCE_ACCESS_KEY", "$sauceAccessKey", "User")
[Environment]::SetEnvironmentVariable("SAUCE_HEADLESS_USERNAME", "$sauceUserName", "User")
[Environment]::SetEnvironmentVariable("SAUCE_HEADLESS_ACCESS_KEY", "$sauceAccessKey", "User")
위의 답변에서 제안한 바와 같이 다음 구문을 모두 사용하려고 했지만, 빌드 중이나 테스트 실행 중과 같이 파이프라인에서 더 아래 작업에 사용하려고 할 때 환경 변수가 항상 비어 있었습니다.
[Environment]::SetEnvironmentVariable("SAUCE_USERNAME", "$(sauceUserName)", "User")
variables:
sauceUserName: '$(sauceUserName)'
인라인 PowerShell 스크립트 작업에서 Azure DevOps 변수를 작성하는 데 구문을 사용했습니다.
- task: PowerShell@2
displayName: Add the username as an environment variable so the tests can find it.
inputs:
targetType: 'inline'
script: |
Write-Host "Making the sauceUsername available as an environment variable."
Write-Host "##vso[task.setvariable variable=SAUCE_USERNAME;]$(sauceUserName)"
그런 다음 빌드 작업에서 환경 변수를 찾을 수 있었고, 파이프라인 아래에 있는 PowerShell 스크립트 작업에서도 다음과 같은 코드로 액세스할 수 있었습니다.
- task: PowerShell@2
displayName: Display the environment variable value for debugging purposes.
inputs:
targetType: 'inline'
script: |
[string] $username= $Env:SAUCE_USERNAME
Write-Host "The SAUCE_USERNAME environment variable value is '$username'."
파이프라인 변수를 설정한 다음 yaml 파일에서 다음 매핑을 시도합니다.
# ASP.NET Core (.NET Framework)
# Build and test ASP.NET Core projects targeting the full .NET Framework.
# Add steps that publish symbols, save build artifacts, and more:
# https://learn.microsoft.com/azure/devops/pipelines/languages/dotnet-core
pool:
vmImage: 'VS2017-Win2016'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
yourEnvVar: '$(yourPipelineVariable)'
yourOtherEnvVar: '$(yourOtherPipelineVariable)'
우리는 이것이 환경 변수를 설정할 수 없기 때문이라고 생각하고 몇 시간 동안 싸웠지만 결국 그것과는 아무런 상관이 없었습니다.
다음은 Azure DevOps를 위해 이 문제를 해결하기 위한 몇 가지 참고 사항입니다.
- 파이프라인 변수는 환경 변수이며 공정의 첫 번째 단계에서 파이프라인에 주입됩니다.이를 확인하려면 의 로그를 참조하십시오.
Initialize job
모든 환경 변수를 나열하는 작업입니다. - 파이프라인 변수가 시스템에 있음을 증명하기 위해 파워셸 작업을 추가하고 인라인으로 연결할 수 있습니다.
Write-Host "Pipeline Variable: $(FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD)"
Write-Host "Environment Variable: $Env:FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"
- 그
()
파이프라인 변수 주변은 파이프라인 변수를 사용하려는 경우에 매우 중요합니다.$(myVar)
사용자 질문과 무관하지만 2단계 인증(2FA)을 사용하여 AppStore에 업로드하려는 사용자에게 도움이 될 수 있습니다.다음은 당사에서 제공하는 문서입니다.
- 우리는 설정해야 했습니다.
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD
그리고.FASTLANE_SESSION
2FA를 우회하도록 하기 위해.세션 1에서는 AppStoreConnect에 로그인할 수 있었지만 App별 암호가 업로드에 사용되었습니다.로그는 사용된 세션 변수를 볼 수 없지만 발생하는 힌트를 정렬합니다.
여기서 정의한 대로 비밀 변수는 단계/작업 환경 변수 섹션에서 명시적으로 설정해야 합니다.
YAML 외부에 정의된 변수를 전달하려면 YAML의 변수가 외부 변수보다 우선하므로 YAML의 변수를 정의하지 않는 것이 중요합니다.
변수가 정의되면 $(변수 이름) 구문을 사용하여 인라인 파워셸 스크립트에서 변수를 참조할 수 있지만 변수 이름은 대문자로 표시해야 합니다.
devops 힌트에 따라:스크립트에서 변수를 사용하려면 환경 변수 구문을 사용합니다.. 및 공백을 _로 대체하고 문자를 대문자로 표시한 다음 플랫폼의 구문을 사용하여 환경 변수를 참조합니다.
환경 변수(예: 비밀)를 사용하여 매핑해야 하는 경우 올바른 구문은 다음과 같습니다.
script: |
write-host "env $env:myvariable"
env:
#not sure if case matters here
myvariable: $(myvariable)
전체 예:
- task: PowerShell@2
inputs:
targetType: 'inline'
script: |
#log the mapped variable, case doesn't matter
write-host "env $env:myvariable"
#directly access pipeline variable, CASE MATTERS!
write-host "pipeline $(MYVARIABLE)"
#show all environment variables
get-childitem env:
env:
#not sure if case matters here
myvariable: $(myvariable)
언급URL : https://stackoverflow.com/questions/52432799/how-to-set-and-read-user-environment-variable-in-azure-devops-pipeline
'programing' 카테고리의 다른 글
분기의 내용을 새 로컬 분기로 복사하려면 어떻게 해야 합니까? (0) | 2023.05.07 |
---|---|
Postgre에서 외부 키가 있는 행 삭제SQL (0) | 2023.05.07 |
Postgres에서 모든 테이블의 행 수를 어떻게 찾습니까? (0) | 2023.05.07 |
SQL Server의 IsNull() 함수에 해당하는 C# (0) | 2023.05.07 |
깃 저장소에서 이전 기록을 제거하려면 어떻게 해야 합니까? (0) | 2023.05.07 |