여러 gitlab 파이프 라인에 걸쳐 작업 그룹을 "잠글"수 있습니까?


11

단일 외부 리소스 (서버)로 작업하는 여러 작업이 있습니다. 첫 번째 작업은 앱을 환경에 배포하고, 두 번째는이 환경에서 테스트를 실행하고, 세 번째는이 환경에서 통합 테스트를 실행합니다.

리소스 그룹 옵션 이 있다는 것을 알고 있습니다. 그러나 작업 만 잠급니다. 두 개의 파이프 라인을 동시에 실행하면 내가 실행해야 job1, job2, job3두 번째 파이프 라인 시작할 수 있습니다 - 첫번째 파이프 라인과 첫 번째 파이프 라인 출시 리소스에서 jobs1-3. 이것을 달성 할 수있는 방법이 있습니까? 파이프 라인에는 다른 작업이 있습니다. 동시에 작업해야합니다.

답변:


1

작업을위한 전용 러너를 설정하십시오 1-3.

  1. 고유 태그 (예 : 'jobs-1-2-3')를 사용하여 concurrent1새 러너설정하고 옵션 을로 설정하십시오 .

  2. 해당 작업에 고유 태그 (예 : 'jobs-1-2-3')를 추가하십시오.

    job1:
      tags:
        - jobs-1-2-3
    job2:
      tags:
        - jobs-1-2-3
    job3:
      tags:
        - jobs-1-2-3
    

IMHO 이것은 노력이 적고 신뢰성이 높습니다.


잘 작동하는지 확실하지 않습니다. 가능한 시나리오 : pipeline1 (p1)은 job1 (j1)을 실행 한 다음 pipeline2 (p2)는 job1 (j1)을 실행 한 다음 파이프 라인 1은 job2를 시작합니다. p1 run j1, j2, j3이 필요하고 p2 run j1, j2, j3이 필요합니다. 자원 그룹과 같은 동일 할 것입니다
Zufar Muhamadeev

새로운 러너는 한 번에 하나의 작업 만 처리하고 고유 한 태그로 인해 다른 러너는 작업을 선택하지 않으므로 p2는 p1이 완료 될 때까지 대기합니다. docs.gitlab.com/ee/user/project/pipelines/…
RiWe

보류중인 파이프 라인을 취소하고 싶지 않습니다. 내가 말했듯이 다른 직업이 있습니다-그들은 동시에 일해야합니다. 두 개의 파이프 라인이 실행 중이고 동시 옵션이 설정되어 있다면, 러너는 항상 첫 번째 파이프 라인에서 작업을 선택합니까?
Zufar Muhamadeev

예, 러너는 p2의 작업을 처리하기 전에 p1의 작업을 완료합니다.
RiWe

이 접근법은 지금까지 작동합니다
Zufar Muhamadeev

0

needsand resource_group키워드와 gitlab API를 통해 구현할 수 있다고 생각합니다 .

모든 작업은 자신이 속한 파이프 라인 ID를받습니다 predefined-variable. gitlab API를 사용하면 파이프 라인에서 다른 작업의 상태를 볼 수 있습니다. 이 상태 needsresource_group키워드를 사용할 수 있다면 원하는 것을 달성 할 수 있다고 생각합니다. 자세한 내용은 아래 코드 설명 및 주석을 참조하십시오.

stages:
  - ready
  - build

job1:
  stage: build
  needs: [starting_signal]
  script: 
    - sleep 10 && echo "job1"
job2:
  stage: build
  needs: [starting_signal]
  script:
    - sleep 20 && echo "job2"
job3:
  stage: build
  needs: [starting_signal]
  script:
    - sleep 30 && echo "job3"

starting_signal:
  stage: ready
  script:
    - # TODO: You need to implement it using the GitLab API.
    - # The starting condition for "job1-3" is
    - # that this `starting_signal` job finished successfully.
    - # And the condition that ends with the success of this job
    - # is that `traffic_light` becomes running.

traffic_light: 
  stage: ready
  resource_group: traffic_light
  script:
    - # TODO: You need to implement it using the GitLab API.
    - # The end condition for `traffic_light` is
    - # the end of job1-3 execution.
    - # In other words, this job must be checked and waited
    - # through gitlab api until job 1,2,3 is finished.
    - # Since this job locks the execution of a `traffic_light` job
    - # in another pipeline, the `starting_signal` job in another 
    - # pipeline does not succeed.

(나는 그것을 직접 테스트하지 않았 으므로이 방법을 검토해야합니다.)

추천 :


답변 주셔서 감사합니다. traffic_light작업 에서 올바른 것을 이해하면 동시 파이프 라인에서 job1-3의 실행 완료를 기다려야합니다. 이 접근법에서 내가 싫어하는 것-동시 파이프 라인의 상태를 확인하는 데 ci 분이 낭비됩니다.
Zufar Muhamadeev

ci 분이 걱정된다면 자체 호스팅 gitlab-runner를 traffic_light사용하여 tags키워드 를 사용할 수 있습니다 . 오늘날 많은 클라우드 공급 업체는 프리 티어 인스턴스를 제공하며 이는 간단한 대기 작업을 실행하기에 충분합니다 traffic_light.
aluc

자체 호스팅 러너에서도 gitlab이 몇 분을 계산하는 것처럼 보입니다. 나는 자체 호스팅 주자에 대한 태그가 느릅 나무 재시도 작업에 노력하고 있어요 -하지만 출시와 쇼 파이프 라인 분에 대한 메시지 제한하지 않는 것은 초과 : i.imgur.com/vBftxmk.png
Zufar Muhamadeev

1
this ( gitlab.com/gitlab-org/gitlab-foss/issues/58942 ) 문제 와 관련이 있으면 할당량이 초과되면 특정 러너가 작동하지 않는 것 같습니다. 이것이 확실하지는 않지만 확실하지 않지만 원래 질문과 직접 ​​관련이 없으므로 여기 또는 gitlab에 별도의 질문을 게시하는 것이 좋습니다.
aluc
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.