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 ☕