How to get merge request ID on Gitlab master pipeline?
Günlük süreçleri otomatize etmeyi seviyorum ve kısa bir süre önce deployment süreçlerinde bir problem farkettim. Deployment yaparken çıkacak MR'ları toplayıp paydaşlara duyurmak hem yorucu hem de insan hatasına açıktı. Bu nedenle, deployment duyurularını otomatize eden bir pipeline entegrasyonu geliştirdim. Akış aşağıdaki gibiydi:
- Release MR oluşturulduğunda pipeline'dan Slack kanalına deployment duyurusu gönderilir.
- Release MR merge edildiğinde duyuru mesajının altına, deployment'ın başladığı bildirilir.
- Release pipeline bittiğinde ise deployment süreci ile ilgili metrikleri içeren bir mesaj atılarak deployment'ın tamamlandığı duyurulur.
Bu aşamada bazı metriklerin hesaplanabilmesi için merge request'in oluşturulma zamanını bilmek gerekir. Yani teknik olarak master pipeline'da merge request ID'sine ihtiyaç duyarız.
On the merge request pipeline
Merge request pipeline'ında merge request id'sini 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ı taahhü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 ortada merge request kalmadığı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.
1curl \
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 ☕