Makalelerim

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

Öncelikle bu durumun merge request pipeline'ında nasıl ele alındığından bahsetmek istiyorum. Merge request pipeline'da id'yi elde etmek için CI_MERGE_REQUEST_IID predefined variable'ını kullanıyoruz.

Değişken değerini undefined olarak alıyorsanız aşağıdaki gibi merge request pipeline'da çalışacağını taahüt eden bir kural eklemek gerekiyor.

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

On the master pipeline

Master pipeline'da, yukarıdaki değişkeni kullanamıyoruz. Bu durumda id'yi nasıl elde edeceğiz? Elbetteki commit SHA'sı ile! Aşağıdaki adımları takip edebiliriz:

  • CI_COMMIT_SHA predefined variable ile commit SHA değerini alıyoruz.
  • Bu değeri kullanarak aşağıdaki gibi bir istek gönderiyoruz.

1curl \
2--location 'https://gitlab.{{companyName}}.com/api/v4/projects/{{projectId}}/repository/commits/{{commitSha}}/merge_requests' \
3--header 'PRIVATE-TOKEN: {{token}}
  • Bu istek, eşleşen merge request'i döndürecektir. Eğer birden fazla merge request ile eşleşiyorsa, CI_COMMIT_TITLE değişkeni ile karşılaştırarak bulabiliriz.

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

Profile img
Enes BaşpınarSoftware Engineer