CI / CD с Azure Конвейерами для моно-репо с несколькими проектами внутри, чтобы построить только обновленный - PullRequest
2 голосов
/ 02 марта 2020

Я пытаюсь собрать CI / CD для нескольких java проектов, которые содержатся в одном репо с Azure конвейерами.

Для этого требовалось создать один конвейер, который будет строить каждый проект с задачей Maven@3. Проблема в том, что когда мы добавляем новый проект, я хочу, чтобы был построен только этот проект, а не каждый предыдущий проект. Мой файл выглядит следующим образом:

    resources:
- repo: self
  clean: true
  lfs: true

trigger:
  branches:
    include:
      - feature/*

variables:
  - group: vars

stages:
- stage: Build
  pool:
    vmImage: 'image' 
  jobs:
  - job: Build
    strategy:
      maxParallel: 4
    steps:
    - task: replacetokens@3
      inputs:
        targetFiles: 'settings.xml'
    - task: Maven@3
      inputs:
        jdkVersionOption: 1.8
        mavenPomFile: 'project1/pom.xml'
        options: '-s $(Build.SourcesDirectory)\settings.xml'
        goals: 'clean package'
    - task: Maven@3
      inputs:
        jdkVersionOption: 1.8
        mavenPomFile: 'project2/pom.xml'
        options: '-s $(Build.SourcesDirectory)\settings.xml'
        goals: 'clean package'

Например, проект1 уже разработан в разработке, поэтому я не хочу делать пакет mvn для него, а только для проекта2, который не объединен и имеет ветвь функций.

Пока этот yml не будет работать, потому что project1 и project2 находятся в одном репо, и эти две задачи будут выполняться, чего я не хочу избегать.

Есть ли способ сказать "onChange" ???

1 Ответ

2 голосов
/ 03 марта 2020

К сожалению, это невозможно из коробки, и это просто позор, если честно.

Самый простой способ справиться с этим - создать две отдельные сборки. Одна сборка для каждого проекта, который вы хотите построить, который находится в том же репо и использует фильтр пути, как это:

trigger:
  branches:
    include:
    - master
    - releases/*
  paths:
    include:
    - docs/*
    exclude:
    - docs/README.md

Используйте шаблоны шагов и определите одну задачу сборки или задание, которое вы затем сможете использовать в несколько сборок, так что легче поддерживать, если несколько проектов имеют одинаковые этапы сборки.

Ссылка на документацию: https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view=azure-devops&tabs=schema%2Cparameter-schema#step -шаблоны

Тем не менее, в inte * 1021 есть руководства, где люди делали сценарии Powershell для создания моно репо-сингла решение для построения.

Один из примеров:

https://dev.to/nikolicbojan/azure-devops-yaml-build-for-mono-repository-with-multiple-projects-146g

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...