Makalelerim

How to get merge request ID on Gitlab master pipeline?

May 10, 2024 #article
---
2 min
How to get merge request ID on Gitlab master pipeline?

GitLab CI üzerinden günlük süreçleri otomatize etmeyi seviyorum. Yakın zamanda monorepo'da manuel deployment duyurularının ne kadar problemli olduğunu farkettim. Çok fazla merge request barındırdığında merge request verilerini çıkarmak zor olabiliyordu, bazı merge request'ler unutulabiliyordu. Hatta ve hatta incident'lar meydana geliyordu. Bu nedenle, deployment duyurularını otomatize eden bir pipeline entegrasyonu geliştirdim. Akış aşağıdaki gibi ilerliyor:

  • Release MR oluşturulduğunda pipeline'dan Slack kanalına deployment duyurusu gönderiyoruz.
  • Release MR merge edildiğinde duyuru mesajının altına, release'in başladığını bildiriyoruz.
  • Release pipeline bittiğinde ise pipelinedeployment süreci ile ilgili süre metriklerini içeren mesajla deployment'ın tamamlandığını duyuruyoruz.

Bu aşamada bazı metriklerin hesaplanabilmesi için merge request'in oluşturulma zamanını bilmemiz gerekiyor. Yani teknik olarak master pipeline'da merge request ID'sine ihtiyaç duyuyoruz.

On the merge request pipeline

Merge request pipeline'da merge request id'yi elde etmek için CI_MERGE_REQUEST_IID predefined variable'ını kullanabilirsiniz. Değişken değerini undefined olarak alırsanız job'ın merge request pipeline'da çalışacağını taahüt eden bir kural eklemeniz gerekir.

1
.enable-on-merge-request-pipeline:
2
  rules:
3
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

On the master pipeline

Master pipeline'da artık ortada merge request olmadığından ötürü olaylar farklılaşır. CI_COMMIT_SHA predefined variable ile commit SHA değerini elde ettikten sonra GitLab API'ye aşağıdaki gibi istek atmak gerekir.

1
curl \
2
--location 'https://gitlab.{{companyName}}.com/api/v4/projects/{{projectId}}/repository/commits/{{commitSha}}/merge_requests' \
3
--header 'PRIVATE-TOKEN: {{token}}

Response olarak eşleşen merge request'ler dönecektir. Birden fazla merge request dönmesi durumunda, CI_COMMIT_TITLE predefined değişkeni ile karşılaştırabilirsiniz.


Meşakatli bir yoldan sonra istediğimize ulaşıyoruz. Siz probleminizi çözerken ben de otomasyonumu tamamlamaya gidebilirim ☕