Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Azure Pipelines - это более новая версия функций сборки и выпуска Azure DevOps.
В этой статье описываются действия по настройке среды Azure Pipelines с помощью непрерывной интеграции и непрерывного развертывания для автоматизации сборок, модульных тестов и развертывания SharePoint Framework.
Выбор между многоступенчатыми конвейерами Azure и сборками и выпусками Azure DevOps
В настоящее время доступны два подхода для реализации непрерывной интеграции и развертывания в Azure DevOps. Сборки и выпуски Azure появились раньше, предлагая интерфейс с графическим оформлением и сохранение определений в JSON-документе, скрытом от пользователя.
Многоступенчатые конвейеры Azure используют определения конвейеров, хранящиеся в репозитории в виде файлов YAML, обеспечивая прозрачность, ведение журнала версий и повторяемость. Оба подхода описаны для SharePoint Framework:
- Сборка и выпуск Azure
- Многоступенчатые конвейеры Azure (эта статья)
Внедрение непрерывной интеграции и непрерывного тестирования
Этап непрерывной интеграции и непрерывного тестирования описывается следующим шаблоном YAML. Скопируйте следующее содержимое в новый файл в корне проекта с именем azure-pipelines-build-template.yml.
parameters:
name: ''
jobs:
- job: ${{ parameters.name }}
pool:
vmImage: 'ubuntu-latest'
demands:
- npm
- node.js
- java
variables:
npm_config_cache: $(Pipeline.Workspace)/.npm
steps:
- checkout: self
- task: NodeTool@0
displayName: 'Use Node 10.x'
inputs:
versionSpec: 10.x
checkLatest: true
- task: CacheBeta@1
inputs:
key: npm | $(Agent.OS) | package-lock.json
path: $(npm_config_cache)
cacheHitVar: CACHE_RESTORED
- script: npm ci
displayName: 'npm ci'
- task: Gulp@0
displayName: 'Bundle project'
inputs:
targets: bundle
arguments: '--ship'
- script: npm test
displayName: 'npm test'
- task: PublishTestResults@2
displayName: Publish test results
inputs:
testResultsFormat: JUnit
testResultsFiles: '**/junit.xml'
#failTaskOnFailedTests: true #if we want to fail the build on failed unit tests
- task: PublishCodeCoverageResults@1
displayName: 'Publish code coverage results'
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/*coverage.xml'
- task: Gulp@0
displayName: 'Package Solution'
inputs:
targets: 'package-solution'
arguments: '--ship'
- task: CopyFiles@2
displayName: 'Copy Files to: $(Build.ArtifactStagingDirectory)'
inputs:
Contents: |
sharepoint/**/*.sppkg
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: drop'
Примечание.
Вы можете закомментировать / удалить задачи PublishCodeCoverageResults, PublishTestResults и npm тест, если у вас нет встроенного модульного теста и / или вы не хотите запускать модульные тесты.
Примечание.
Вы можете найти последнюю версию этого файла на образце
Внедрение непрерывного развертывания
Этап непрерывного развертывания описывается следующим шаблоном YAML. Скопируйте следующее содержимое в новый файл в корне проекта с именем azure-pipelines-deploy-template.yml.
parameters:
# unique name of the job
job_name: deploy_sppkg
# friendly name of the job
display_name: Upload & deploy *.sppkg to SharePoint app catalog
# name of target environment deploying to
target_environment: ''
# app catalog scope (tenant|sitecollection)
m365cli_app_catalog_scope: 'tenant'
variable_group_name: ''
jobs:
- deployment: ${{ parameters.job_name }}
displayName: ${{ parameters.display_name }}
pool:
vmImage: 'ubuntu-latest'
environment: ${{ parameters.target_environment }}
variables:
- group: ${{parameters.variable_group_name}} #m365_user_login, m365_user_password, m365_app_catalog_site_url
strategy:
runOnce:
deploy:
steps:
- checkout: none
- download: current
artifact: drop
patterns: '**/*.sppkg'
- script: sudo npm install --global @pnp/cli-microsoft365
displayName: Install CLI for Microsoft365
- script: m365 login $(m365_app_catalog_site_url) --authType password --userName $(m365_user_login) --password $(m365_user_password)
displayName: Login to Microsoft 365
- script: |
CMD_GET_SPPKG_NAME=$(find $(Pipeline.Workspace)/drop -name '*.sppkg' -exec basename {} \;)
echo "##vso[task.setvariable variable=SpPkgFileName;isOutput=true]${CMD_GET_SPPKG_NAME}"
displayName: Get generated *.sppkg filename
name: GetSharePointPackage
- script: m365 spo app add --filePath "$(Pipeline.Workspace)/drop/sharepoint/solution/$(GetSharePointPackage.SpPkgFileName)" --appCatalogUrl $(m365_app_catalog_site_url) --scope ${{ parameters.m365cli_app_catalog_scope }} --overwrite
displayName: Upload SharePoint package to Site Collection App Catalog
- script: m365 spo app deploy --name $(GetSharePointPackage.SpPkgFileName) --appCatalogUrl $(m365_app_catalog_site_url) --scope ${{ parameters.m365cli_app_catalog_scope }}
displayName: Deploy SharePoint package
Примечание.
Вы можете найти последнюю версию этого файла на образце
Определение структуры конвейера
Теперь, когда этапы сборки и развертывания определены в соответствующих шаблонах, его необходимо собрать как многоступенчатый конвейер. В этом документе будет описана структура конвейера, а также различные используемые среды. Скопируйте следующее содержимое в новый файл в корне проекта с именем azure-pipelines.yml.
name: $(TeamProject)_$(BuildDefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)
resources:
- repo: self
trigger:
branches:
include:
- master
- develop
stages:
- stage: build
displayName: build
jobs:
- template: ./azure-pipelines-build-template.yml
parameters:
name: 'buildsolution'
- stage: 'deployqa'
# uncomment if you want deployments to occur only for a specific branch
#condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/develop'))
jobs:
- template: ./azure-pipelines-deploy-template.yml
parameters:
job_name: deploy_solution
target_environment: 'qa'
variable_group_name: qa_configuration
Примечание.
Вы можете найти последнюю версию этого файла на образце
Примечание.
Вы можете определить несколько сред, дублируя этап deployqa и предоставляя различные параметры. В этом случае убедитесь, что имя этапа, имя задания, целевая среда и имя группы переменных являются уникальными.
Примечание.
Вы можете выполнять условное развертывание в разных средах, используя условия
Настройка учетных данных для сред
Секреты никогда не должны передаваться в хранилище по соображениям безопасности. Конвейер, описанный в предыдущих шагах, использует группы переменных для сохранения секретности значений конфигурации. Группы переменных должны быть созданы для каждой среды, и имя должно соответствовать тому, что описано в определении конвейера (здесь qa_configuration). Чтобы создать группу переменных, выполните следующие действия:
- Войдите в Azure DevOps, перейдите к своему проекту
- В разделе Конвейеры выбрать Библиотека
- Добавьте новую группу переменных убедившись, что имя соответствует тому, что определено в определении конвейера
- Добавьте следующие переменные в группу и выберите Сохранить
- m365_user_login: имя для входа администратора клиента SharePoint
- m365_user_password: пароль пользователя учетной записи
- m365_app_catalog_site_url: URL-адрес семейства сайтов каталога приложений
Примечание.
Вы можете выбрать значок на панели блокировки рядом с вводом значения переменной, чтобы пометить его как чувствительный, и Azure DevOps Services скрывает это значение от других пользователей и из журналов.