code

다른 파이프라인에서 Azure Devops 파이프라인 트리거

starcafe 2023. 5. 23. 22:03
반응형

다른 파이프라인에서 Azure Devops 파이프라인 트리거

Azure DevOps의 다른 파이프라인에서 파이프라인을 트리거하는 데 문제가 있습니다.CI 파이프라인이 있으며 CI가 마스터 분기를 통과할 때마다 Deploy Pipeline을 트리거하려고 합니다.이것은 기술적으로 가능한 것처럼 보이지만, 문서는 명확하지 않습니다.

다음이 표시됩니다.

# this is being defined in app-ci pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
      - releases/*
      - master

그러나 a) 트리거 파이프라인(CI 파이프라인)에 이 기능이 적용되는지 아니면 트리거 파이프라인(구현 파이프라인)에 적용되는지는 명확하지 않습니다.

또한 무엇이 무엇인지에 대해서도 명확하지 않습니다.pipeline그리고.source참조하십시오. 그리고 이 변수들을 어떻게 찾을 수 있습니까?둘 다 파이프라인 이름인가요?저는 다양한 종류의 순열을 시도해 보았지만 아무 것도 효과가 없는 것 같습니다.

편집 2

마지막으로 Microsoft는 YAML의 파이프라인 트리거와 관련된 문서를 개선했습니다!여기 링크가 있습니다.

편집

Microsoft는 제 답변을 작성한 후 기존 파이프라인을 통해 빌드 완료 트리거를 사용하여 이 문제를 해결할 수 있는 다른 솔루션을 개발했습니다.솔루션은 여기에서 확인할 수 있습니다.



트리거 파이프라인에서 아티팩트를 게시하지 않으면 트리거된 파이프라인이 트리거되지 않습니다.

또한, 이러한 유형의 트리거 사용에 매우 큰 제한이 있습니다.를 변경할 가 있습니다.defaultBranch for manual and scheduled builds에 시대에depends파이프라인, 작업 분기에 연결합니다.그렇지 않으면 그것은 마지막에 시작되지 않을 것입니다.source파이프라인의 시공그래서, 당신이 연구하고 있다고 가정해 봅시다.feature 지점, 그고리.defaultBranch으로 설정됨feature코드를 커밋하면 모든 것이 예상대로 실행됩니다.source파프라인시이고작되에마막, 지이막,에▁pipeline▁kicks▁the,depends파이프라인이 트리거됩니다.좋요아때! 하지만 하당만으로 는.master▁the▁you면▁do▁change않으를 변경하지 않으면defaultBranch,depends▁of▁end 끝에 않습니다.source파이프라인변경 방법을 설명합니다.defaultBranch대답의 끝에


파이프라인 트리거 설정 방법

저는 이것을 미니멀리즘 프로젝트에서 실행할 수 있었습니다.여기서 코드와 Azure DevOps에 대한 프로젝트를 볼 수 있습니다.제가 어떻게 했는지 안내해 드리며, 게시물에서 질문하신 내용에 대해 답변해 드리겠습니다.

트리거된 파이프라인을 다음과 같이 호출합니다.depends 및 을 파이라파이인으로 합니다.source파이프라인

source파이프라인, 아티팩트를 게시하는 것 외에는 아무것도 할 필요가 없습니다.의 아티팩트를 게시하지 않는 경우source파이프라인, 작동하지 않을 것입니다.가 더미에 .source파이프라인나는 그것이 트리거되기를 원합니다.master브랜치, 그리고 마지막으로 아티팩트를 확실히 게시하고 싶습니다.

trigger:
  branches:
    include: # branch names which will trigger a build
    - master
pr: none

steps:
  # required to cause pipeline triggering downstream
  - task: CopyFiles@2
    inputs:
      contents: $(System.DefaultWorkingDirectory)/**/*.yml
      targetFolder: $(Build.ArtifactStagingDirectory)
  - task: PublishBuildArtifacts@1
    inputs:
      pathtoPublish: $(Build.ArtifactStagingDirectory)
      artifactName: dummy-$(Build.BuildId)

depends파이프라인(아래에 표시된 코드), 사용하지 않도록 설정해야 합니다.CI그리고.PR 이때 이 은 "", "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""CI트리거, 그리고 실행이 끝날 때까지.source은 제두 첫 됩니다.이 작업은 제 코드의 첫 두 줄에 의해 수행됩니다. 저는 그럼그파이의라는 .source은 (이것이바로바)입니다.source에서 YAML에 포함된 YAML에 포함됩니다.Pipelining(project이YAML 속성)를 .depends 시 ) 업데트시파라인프이이master분점.

trigger: none
pr: none
resources:
  pipelines:
    - pipeline: source
      project: Pipelining
      source: source
      trigger: 
        branches:
          include:
          - master
steps:
  - checkout: none
  - script: echo 'triggered depends'

그게 말이 되는 건가요?이 Azure DevOps와 합니다.property YAML에서.depends파이프라인 코드.나에게는 그것이Pipelining

여기에 이미지 설명 입력

만아라니뿐라.source YAML , 다시 YAML에서.depends파이프라인 코드.

여기에 이미지 설명 입력


변할내용을 합니다.default

defaultBranch위서언문이때제에, 파을편합야니다집해인경우라프문이당신한급은에이▁because▁((,depends 위에 세 에서 파프라인이오, 그다쪽상단모선서리점택의다세니표됩시개에른런음▁on▁pipeline),다를 선택합니다.Triggers 다음 다을선니다합택음▁the를 선택합니다.YAML탭을 누르면 아래 이미지에 표시된 화면으로 이동하여 작업 분기를 설정할 수 있습니다.

여기에 이미지 설명 입력

위의 yaml 파이프라인 트리거는 트리거된 파이프라인(파이프라인 배포)에 정의되어야 합니다.

- pipeline: string여기에 있는 문자열은 이 파이프라인 리소스에 지정한 식별자입니다.어떤 문자열이든 가능합니다.

source: string여기서 문자열은 트리거 파이프라인의 정의 이름(CI 파이프라인의 이름)입니다.

아래 yaml은 문서 파이프라인 리소스에서 가져온 것입니다.

resources:
  pipelines:
  - pipeline: string  # identifier for the pipeline resource
    project:  string # project for the build pipeline; optional input for current project
    source: string  # source pipeline definition name
    branch: string  # branch to pick the artifact, optional; defaults to all branches
    version: string # pipeline run number to pick artifact, optional; defaults to last successfully completed run
    trigger:     # optional; triggers are not enabled by default.
      branches:
        include: [string] # branches to consider the trigger events, optional; defaults to all branches.
        exclude: [string] # branches to discard the trigger events, optional; defaults to none.

옵션: UI 페이지에서 파이프라인 트리거를 설정할 수도 있습니다.트리거된 yaml 파이프라인(파이프라인 배포)의 편집 페이지로 이동하여 점 3개를 클릭하고 트리거를 선택합니다.

여기에 이미지 설명 입력

트리거--> 빌드 완료로 이동하고 추가를 클릭합니다.--> 트리거링 파이프라인(CI 파이프라인)을 선택

여기에 이미지 설명 입력

업데이트:

zure-deploy.yml의 파이프라인 리소스는 아래와 같이 정의되어 있습니다.

resources:
  pipelines:
  - pipeline: 'Deploy to Development'
    source: 'DFE-Digital.dfe-teachers-payment-service'
  trigger:
    branches:
      include:
      - "master"
      - "release-stuff"

트리거 요소의 들여쓰기를 소스 요소와 동일하게 변경해 보십시오.아래 예를 확인하십시오.

    resources:
      pipelines:
      - pipeline: 'Deploy to Development'
        source: 'DFE-Digital.dfe-teachers-payment-service'
        trigger:
          branches:
            include:
            - "master"
            - "release-stuff"

다음을 찾았습니다.

  • 소스 파이프라인에서 아티팩트를 생성할 필요가 없었습니다.

  • In depends pipeline 소스 브랜치를 커밋한 후 빌드하려면 다음 작업을 수행할 수 있습니다.

    trigger: none
    pr: none
    resources:
          pipelines:
          - pipeline: 'depends'
            source: 'common-gulp-trigger'
            trigger: true

당신은 마스터 브랜치에서 일하고 있지 않은 것으로 추정됩니다, 그렇죠?이전에도 같은 문제가 있었습니다.하지만 MS 문서의 트리거에 대한 기본 분기 섹션을 읽은 후.왜 그런지 이해합니다.트리거는 기본적으로 마스터 분기의 yaml 파일만 검사합니다.즉, 마스터 분기의 yaml 파일에 있는 트리거 정의에 의해서만 파이프라인이 트리거됩니다.

따라서 마스터가 아닌 다른 분기의 yaml 파일 트리거 섹션에 추가하는 분기는 모두 활성화되지 않습니다.마스터가 아닌 현재 분기의 yaml 파일을 보려면 파이프라인을 변경해야 합니다.문서의 지시에 따라 기본 트리거 분기를 변경합니다.당신은 그것을 작동시킬 것입니다.

작업을 마스터로 병합한 후에는 기본 트리거 분기를 마스터로 다시 변경해야 합니다.

언급URL : https://stackoverflow.com/questions/60643528/triggering-an-azure-devops-pipeline-from-another-pipeline

반응형