#azure #azure-devops #yaml #azure-pipelines
#azure #azure-devops #yaml #azure-конвейеры
Вопрос:
У меня есть конвейер CI (YAML), который создает репозиторий, который будет развернут в существующую функцию Azure. Конвейер CI выполняет это задание. Однако после того, как это будет сделано, и я перехожу к функции App -> App files -> я вижу azure-pipeline.yml включен туда (или я думаю, что он был включен в процесс сборки). Я пробовал использовать пути и исключения, но они не работают. Мой вопрос в том, как мне исключить только этот azure-pipeline.yml, чтобы после завершения сборки конвейера, azure-pipeline.yml отсутствует в файлах приложения в приложении функций. Ниже приведен мой YAML
trigger:
branches:
include:
- master
paths:
exclude:
- README.md
- azure-pipelines.yml
variables:
# Azure Resource Manager connection created during pipeline creation
azureSubscription: 'DevOps-Test'
# Function app name
functionAppName: 'test'
# Agent VM image name
vmImageName: 'vs2017-win2016'
# Working Directory
workingDirectory: '$(System.DefaultWorkingDirectory)/'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- powershell: |
if (Test-Path "extensions.csproj") {
dotnet build extensions.csproj --output ./$(workingDirectory)/bin
}
displayName: 'Build extensions'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: $(workingDirectory)
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- publish: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
artifact: drop
- task: DownloadBuildArtifacts@0
inputs:
buildType: 'current'
downloadType: 'single'
artifactName: 'drop'
downloadPath: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
- task: AzureFunctionApp@1
displayName: 'Azure functions app deploy'
inputs:
azureSubscription: '$(azureSubscription)'
appType: functionApp
appName: $(functionAppName)
package: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
Ответ №1:
Следующий синтаксис означает file README.md
или azure-pipelines.yml
не будет запускать сборку. Это не означает, что файл README.md
или azure-pipelines.yml
исключены из рабочего каталога.
trigger:
branches:
include:
- master
paths:
exclude:
- README.md
- azure-pipelines.yml
Я заметил, что вы пытались архивировать папку $(workingDirectory)
и workingDirectory
определили в переменной, которая была на самом деле $(System.DefaultWorkingDirectory)/
. System.DefaultWorkingDirectory
это локальный путь к агенту, по которому загружаются файлы исходного кода.
Очевидно, что file README.md
и azure-pipelines.yml
находятся в исходном коде, поэтому они также архивируются. Вы можете добавить CopyFiles task
before ArchiveFiles task
для копирования необходимых файлов из исходной папки в целевую папку с использованием шаблонов сопоставления, а затем заархивировать целевую папку. Например:
- task: CopyFiles@2
displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory) '
inputs:
SourceFolder: '$(workingDirectory)'
Contents: |
**/*
!*.md
!*.yml
TargetFolder: '$(Build.ArtifactStagingDirectory) '
- task: ArchiveFiles@2
displayName: 'Archive files '
inputs:
rootFolderOrFile: '$(Build.ArtifactStagingDirectory) '
Комментарии:
1. Вы проверили мой ответ? Полезно ли это?
Ответ №2:
Посмотрите здесь
- powershell: |
if (Test-Path "extensions.csproj") {
dotnet build extensions.csproj --output ./$(workingDirectory)/bin
}
displayName: 'Build extensions'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: $(workingDirectory)
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
Вы создаете свой вывод здесь ./$(workingDirectory)/bin
, но вы заархивировали rootFolderOrFile: $(workingDirectory)
. Пожалуйста, измените его на rootFolderOrFile: $(workingDirectory)/bin
.
Редактировать
Пожалуйста, добавьте это перед вызовом archive
- script: |
rm README.md
rm azure-pipelines.yml
workingDirectory: $(workingDirectory)
Таким образом, вы удалите их из папки, которую позже заархивируете.
Комментарии:
1. Пожалуйста, проверьте, как выглядит ваш рабочий каталог, добавив
- script: ls '$(workingDirectory)'
Archove files
шаг before.2. Вот мой рабочий каталог, который я хочу исключить README.md и azure-pipelines.yml не будет отображаться в файлах приложения в приложении-функции imgur.com/a/tIT1wFw
3. Это немного странно, но проверьте мою правку.