Azure DevOps SQL Dacpac 릴리스 작업-빌드 변수 추출
Azure DevOps 파이프 라인에서 데이터베이스 (Visual Studio 2017 + SSDT)를 릴리스하는 CI / CD 파이프 라인이 실행 중입니다. 프로세스는 잘 작동하지만 일부 빌드 정보를 데이터베이스에 기록하려고합니다.
빌드 정보를 로깅하기위한 로깅 테이블을 만들고이를 로깅 하려는 정보에 대한 참조로 사용 했습니다 . 프로젝트 속성 "SQLCMD 변수"섹션에서 원하는 변수 (BuildID, Build.TriggeredBy.DefinitionName, Build.Reason, Build.SourceBranch, Build.SourceVersion, Build.SourceMessage)와 일치하도록 설정했습니다.

Azure DevOps에 대한 "추가 SQLPackage.ext Arguments"에 다음 매개 변수를 추출하기 위해 sqlcmd를 릴리스합니다.
/v:BuildID=$(Build.BuildId) /v:BuildTriggeredBy=$(Build.TriggeredBy.DefinitionName) /v:BuildReason=$(Build.Reason) /v:BuildSourceBranch=$(Build.SourceBranch) /v:BuildSourceVersion=$(Build.SourceVersion) /v:BuildSourceMessage=$(Build.SourceVersionMessage)
이러한 값을 로깅 테이블에 기록하는 배포 후 스크립트를 만들었습니다. 이론적으로 릴리스가 성공할 때마다 빌드 정보가 기록되어야합니다.
INSERT INTO dbo.ReleaseLog ([BuildID],[TriggeredBy],[Reason],[SourceBranch],[SourceVersion],[SourceVersionMessage])
VALUES ('$(BuildID)','$(BuildTriggeredBy)','$(BuildReason)','$(BuildSourceBranch)','$(BuildSourceVersion)','$(BuildSourceMessage)')
이들 중 일부는 잘 작동하지만 다른 일부는 전혀 작동하지 않습니다. 작동하는 것 : BuildID, SourceBranch, SourceVersion
그렇지 않은 경우 (그리고 "$ (VariableName)"을 반환) : Build.TriggeredBy.DefinitionName, Build.Reason, Build.SourceVersion

왜 그럴까요? 모든 변수를 확인했는데 괜찮은 것 같습니다. 내가 포함하는 모든 변수는 릴리스가 끝날 때 사용할 수 있어야한다고 생각합니다. 다른 변수가 작동하지 않을 때 일부 변수가 작동한다는 것이 이상하게 보입니다. 세 번 확인했습니다 (VS와 릴리스 파이프 라인 사이에 변수 이름을 복사하고 붙여 넣은 다음 MS 사이트에서 정확한 이름을 복사했습니다). 그래서 코드 문제처럼 보이지 않습니다. Azure DevOps 버그?
답변
Azure DevOps SQL Dacpac 릴리스 작업-빌드 변수 추출
빌드 파이프 라인 에서 사전 정의 된 모든 변수를 가져올 수없는 릴리스 파이프 라인 에서 배포 후 스크립트를 생성했기 때문 입니다.
클래식 릴리스 및 아티팩트 변수 에서 이러한 변수를 확인할 수 있습니다 . Build.TriggeredBy.DefinitionName , Build.Reason , Build.SourceVersionMessage 변수 는 클래식 릴리스 및 아티팩트 변수가 아니라 사전 정의 된 변수 사용에 있습니다 . 이것이 릴리스 파이프 라인에서 변수를 지정할 수없는 이유입니다.
( 당신은 Build.SourceVersion
당신의 질문에 말했지만 당신이 제공 한 이미지에 따르면 잘못된 변수를 쓴 것 같습니다Build.SourceVersionMessage
.).
이 문제를 해결하기 위해 빌드 파이프 라인 에서 배포 후 스크립트를 생성 할 수 있습니다 .