Я пытаюсь создать веб-приложение из артефакта и передать значение переменной для приложения из файла JSON в YAML.
У меня проблема в конце конвейера. Я могу либо создать веб-приложение без значения из переменной для имени приложения, и оно будет построено, но когда я пытаюсь указать переменную в качестве имени приложения, оно терпит неудачу и сообщает, что не может видеть файл артефакта.
Мой код для файла YAML ниже. Будем очень признательны за любое руководство или помощь.
#pool:
# vmImage: windows-latest
resources:
repositories:
- repository: Student
name: PROJECT NAME/Student
path:
- include: /Student/Student
type: git
ref: master #branch name
variables:
System.Debug: true
azureSubscription: 'MY VALUE HERE'
RG: 'PROJECTNAME'
containername: 'private'
jobs:
- job: job1
displayName: Create And Publish Artifact
pool:
vmImage: vs2017-win2016
steps:
- checkout: Student
clean: true
- task: DotNetCoreCLI@2
displayName: dotnet restore
inputs:
command: restore
projects: '**/*.csproj'
- task: DotNetCoreCLI@2
displayName: dotnet build
inputs:
projects: '**/*.csproj'
workingDirectory: Student
- task: DotNetCoreCLI@2
displayName: dotnet publish
inputs:
command: publish
projects: '**/*.csproj'
arguments: --output "$(Build.ArtifactStagingDirectory)"
zipAfterPublish: true
modifyOutputPath: false
workingDirectory: Student
- task: PublishPipelineArtifact@1
displayName: Publish Pipeline Artifact
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifact: 'Student'
publishLocation: 'pipeline'
- job: job2
displayName: 'Get Variable Value for Student Env'
dependsOn: job1
steps:
- task: AzureCLI@1
displayName: 'Azure CLI '
inputs:
azureSubscription: $(azureSubscription)
scriptLocation: inlineScript
inlineScript: |
mkdir $(Pipeline.Workspace)\BlobFile
az storage blob download --container-name $(containername) --file '$(Pipeline.Workspace)/s/student.json' --name 'student.json' --connection-string 'DefaultEndpointsProtocol=https;EndpointSuffix=core.windows.net;AccountName=devscriptstorage;AccountKey'MY VALUE HERE'
- pwsh: |
cd '/home/vsts/work/1/s/'
ls
$armOutput = Get-Content '/home/vsts/work/1/s/student.json' | convertfrom-json
$student = $armOutput.studentvalue #use student not studentvalue
$type = $armOutput.type
Write-Host "The value of [$student] is [$type]"
Write-Host "##vso[task.setvariable variable=studentvalue;isOutput=true]$student" #use studentvalue not $studentvalue
name: setvarStep
- script: echo $(setvarStep.studentvalue)
name: echovar
- job: job3
displayName: Create Web App
dependsOn: job2
variables:
webappname: $[ dependencies.job2.outputs['setvarStep.studentvalue'] ]
steps:
# creat empty web app with the student value from variable.
- task: AzureWebApp@1
inputs:
azureSubscription: $(azureSubscription)
appType: 'webApp'
resourceGroupName: $(RG)
appName: $(webappname)
# download the artifact drop from the previous job
- task: DownloadBuildArtifacts@0
inputs:
artifactName: Student
# deploy to Azure Web App
- task: AzureWebApp@1
inputs:
azureSubscription: $(azureSubscription)
appName: $(webappname)
- task: AzureAppServiceSettings@1
inputs:
azureSubscription: $(azureSubscription)
appName: $(webappname)
resourceGroupName: $(RG)
# To deploy the settings on a slot, provide slot name as below. By default, the settings would be applied to the actual Web App (Production slot)
# slotName: staging
appSettings: |
{
"name": "DIAGNOSTICS_AZUREBLOBCONTAINERSASURL",
"value": "VALUEINHERE",
"slotSetting": false
},
{
"name": "DIAGNOSTICS_AZUREBLOBRETENTIONINDAYS",
"value": "365",
"slotSetting": false
},
{
"name": "OEM",
"value": "netsupport",
"slotSetting": false
},
{
"name": "SCM_REPOSITORY_PATH",
"value": "d:\\home\\respository",
"slotSetting": false
},
{
"name": "VIDEO_CLIENT_URL",
"value": "https://signal-uks.classroom.cloud",
"slotSetting": false
},
{
"name": "WEBSITE_NODE_DEFAULT_VERSION",
"value": "10.15.2",
"slotSetting": false
}




Мне удалось найти решение этого вопроса в блоге Alessandro Mouras "http://www.alessandromoura.com.br/2020/04/23/azure-devops-publish-and-download-artifacts/"
Как только вы добавите следующий код:
steps:
- download: none
- task: DownloadPipelineArtifact@2
displayName: 'Download Build Artifacts'
inputs:
patterns: '**/*.zip'
path: '$(Build.ArtifactStagingDirectory)'Он найдет Артефакт и загрузит его. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что он не будет создавать веб-приложение, потому что мне передается имя переменной времени выполнения, и, похоже, предполагается, что ресурс уже должен существовать.
Это текущая ошибка: ресурс nsclassroomstudent-dgyn27h2dfoyo не существует. Ресурс должен существовать до развертывания.
Если вы что-нибудь знаете об артефактах, веб-приложениях и Azure, я буду продолжать усердно работать. Я хотел бы высказать ваше мнение. :)
Привет @Jason! Спасибо, что поделились своим опытом. Рекомендую отметить свой ответ как решение данной темы. Это также может быть очень полезно для других людей, которые ищут решение подобных проблем. Спасибо.