Azure DEVOPS Трубопровод/Ресурсы YAML
Трубопроводы Azure DevOps обеспечивают очень полезное Ресурсы Мы можем определить в нашем трубопроводе в одном месте и быть употребленным в любом месте нашего трубопровода.
Ресурс — это все, что используется трубопроводом, который живет за пределами трубопровода. Ресурсы трубопроводов включают в себя:
- CI/CD трубопроводы, которые производят артефакты (лазурные трубопроводы, дженкинс и т. Д.)
- Репозитории кода (Azure Reppos Git Reppos, Github, Github Enterprise, Bitbucket Cloud)
- Регистрация контейнеров изображений (реестр Azure Container, Docker Hub и т. Д.)
- Пакетные каналы (пакеты GitTub)
Сегодня мы посмотрим на Трубопроводы ресурса В частности, мы рассмотрим, как мы можем использовать этот ресурс в трубопроводе, чтобы потреблять артефакт, который был произведен в другом трубопроводе в совершенно другом проекте. Наш трубопровод также будет также автоматически вызвать автоматически с помощью исходного трубопровода после создания и опубликованного артефакта.
Потреблять удаленные трубопроводные артефакты
В моей организации DevOps я создал два проекта, а именно Проект и Projectb Отказ Я также создал два трубопровода YAML для каждого соответствующего проекта по имени Pipelinea. и Трубопровод . Трубопроводы Будет мой запуск/исходный трубопровод, который создаст артефакт под названием Артефакты . Pipelineb Будет мой трубопровод, который будет содержать ресурс трубопровода для Pipelinea. и будет потреблять Артефакты .
В Проект Я также создал репозиторий под названием Репо который содержит файл под названием Myconfig.txt Отказ
Я также создал следующий код в Pipelinea.yml Отказ
## code/PipelineA.yml
trigger: none
stages:
- stage: Build_Artifact
displayName: Build Artifact A
jobs:
- job: Build
displayName: Build
pool:
name: Azure Pipelines
vmImage: windows-2019
steps:
- task: CopyFiles@2
displayName: 'Copy myConfig to Staging'
inputs:
SourceFolder: '$(Build.SourcesDirectory)'
Contents: 'MyConfig.txt'
TargetFolder: '$(Build.ArtifactStagingDirectory)/drop'
- task: PublishPipelineArtifact@1
displayName: 'Publish Artifact to Pipeline'
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)/drop'
artifactName: ArtifactA
ЗАМЕТКА: Важно отметить, что когда мы создаем вышеуказанный трубопровод в нашем исходном проекте, мы должны переименовать трубопровод к тому же названию, что и что мы будем ссылаться на него в нашем ресурсе трубопровода на Pipelineb Отказ В моем случае я ссылаюсь на это как Pipelinea Отказ
Вышеуказанный трубопровод YAML возьмет файл Myconfig.text и создать трубопровод артефакт, содержащий файл под названием Артефакты Отказ
В Проект У меня есть Pipelielyb.yml.yml. Содержит ресурс трубопровода для Pipelinea и будет вызван один раз Pipelinea завершится, и мы будем использовать задачу загрузки, чтобы также потреблять артефакт, который был произведен Pipelinea. .
## code/PipelineB.yml
trigger: none
pr: none
# ------ This is our Pipeline Resource ------
resources:
pipelines:
- pipeline: PipelineA # identifier for the resource used in pipeline resource variables.
project: ProjectA # project for the source; optional for current project.
source: PipelineA # name of the pipeline that produces an artifact.
trigger: # triggers are not enabled by default unless you add trigger section to the resource.
branches: # branch conditions to filter the events, optional; Defaults to all branches.
include: # branches to consider the trigger events, optional; Defaults to all branches.
- main
# ------------------------------------------
stages:
- stage: Consume_Artifact
displayName: Consume Artifact A
jobs:
- job: Consume
displayName: Consume
pool:
name: Azure Pipelines
vmImage: windows-2019
steps:
- task: PowerShell@2
displayName: 'Information'
inputs:
targetType: inline
script: |
Write-output "This pipeline has been triggered by: $(resources.pipeline.PipelineA.pipelineName)"
- download: PipelineA
artifact: 'ArtifactA'
- task: PowerShell@2
displayName: 'Get-Content MyConfig.txt'
inputs:
targetType: inline
script: |
Get-Content -path $(Pipeline.Workspace)/PipelineA/ArtifactA/MyConfig.txt
ЗАМЕТКА: Важно отметить, что мы должны настроить Projectb Настройки трубопроводов позволяют ему подключиться к Проект Для того, чтобы скачать артефакт, который был произведен.
Метаданные для ресурса трубопровода, доступны как предопределенные переменные, которые мы можем ссылаться, как вы можете увидеть из нашего Pipelyb.yml В следующем фрагменте кода:
## code/PipelineB.yml#L29-L30 script: | Write-output "This pipeline has been triggered by: $(resources.pipeline.PipelineA.pipelineName)"
Предопределенные переменные трубопроводных ресурсов:
resources.pipeline..projectID resources.pipeline. .pipelineName resources.pipeline. .pipelineID resources.pipeline. .runName resources.pipeline. .runID resources.pipeline. .runURI resources.pipeline. .sourceBranch resources.pipeline. .sourceCommit resources.pipeline. .sourceProvider resources.pipeline. .requestedFor resources.pipeline. .requestedForID
Теперь, когда мы запускаем и запуску Pipelinea в Проект , он автоматически создаст наш Артефакты а также после завершения Pipelineb в Projectb будет автоматически вызван, а также скачать и потреблять Артефакты Это было создано в Проект .
Также обратите внимание, что триггеры для ресурсов создаются на основе конфигурации ветви по умолчанию нашего YAML, которая является мастером. Однако, если мы хотим настроить триггеры ресурсов из другого ветви, нам нужно будет изменить ветку по умолчанию для трубопровода. Для получения дополнительной информации посмотрите на Ветвь по умолчанию для триггеров Отказ
Я надеюсь, что вы наслаждались этим постом и узнали что-то новое. Вы также можете найти образцы кода, используемые в этом сообщении в блоге, на моем Github страница. ❤ ️
Автор
Вроде, поделиться, следуй за мной: 🐙 Github |. 🐧 Twitter |. 👾 Linkedin.
Марсель Легов
Оригинал: «https://dev.to/pwd9000/consume-artifacts-from-a-remote-devops-project-pipeline-2f3a»