• Hakkımızda
  • Bize Katıl
  • Sizden Gelenler
  • İletişim
Yazılım Karavanı | Bilişim - Teknoloji - Blog
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar
No Result
View All Result
Yazılım Karavanı | Bilişim - Teknoloji - Blog
No Result
View All Result
Home DevOps

Azure DevOps Rest Api ile Çalışmak

Mercan Karacabey by Mercan Karacabey
Ocak 28, 2022
in DevOps, Genel
8 min read
0
Azure DevOps Rest Api ile Çalışmak
WhatsApp'ta PaylaşTwitter'da PaylaşLinkedIn'de PaylaşTelegram'da Paylaş

Bu yazıyı, projede kullanırken özellikle kaynak sıkıntısı yaşamış olduğum için, ekstra bir kaynak türetebilmek amacıyla yazmak istedim. Microsoft’un kendi yayınlamış olduğu dokumanda basit anlamda api’lerin tanımları ve parametreleri yer almakta fakat kullanım farklılıkları yaşandığı durumlardaki çözümler maalesef yer almıyor. Bu yazıda apileri kullanma biçimimden ve karşılaştığım bazı problemlere getirdiğim çözümleri anlatacağım.

Azure Devops temel olarak sürüm kontrolü, raporlama, gereksinim yönetimi, proje yönetimi, otomatik derlemeler, DevOps süreçlerini barındıran pipeline kurulumları ve release adımlarını, test durumlarını içinde barındıran bir Microsoft ürünüdür.

devops1
Bu yazı içinde proje yönetimi ile ilgili bazı işlemler yapmak amacıyla Azure Devops Rest Api’nin kullanımını anlatacağım. Azure Devops Rest Api içerisinde Post ve Get methodlarıyla farklı türlerde özellikler yaratabilmek ve bunları yönetebilmeyi hedefledik.

Azure Devops içerisinde süreçleri ve projeyi takip edebilmek için işleri gruplandırırız. Bunlar en üst kırılımdan itibaren, epic -> feature -> user story -> task ve hatalar için bug şeklindedir.

Rest apiler ile çalışabilmek için personal access token türetmek gerekmektedir. Personal access token ayarlar menüsünden aşağıdaki gibi seçilir:

devops2
Açılan ekran üzerinden New Token butonuyla yeni yaratma işlemini yapabilirsiniz. Token sürenizi kişisel olarak ayarlayabilir workflow üzerinde yapacağınız işlemlere Read, Read Write, Read Write Manage seçenekleri üzerinden bir yetkilendirme seçerek yaratabilirsiniz.

devops3
Örnek bağlantılar JavaSpring uygulaması üzerinde gösterilmektedir.

Azure Devops ile bağlantı kurabilmek için bağlantı parametrelerini aşağıdaki gibi ayarlayabilirsiniz.

String encodedPAT = Base64.getUrlEncoder().encodeToString(personalAccessToken.getBytes());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Authorization","Basic" + encodedPAT);
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type","application/json-patch+json;charset=utf-8");

Bu işlemler sonrasında kendi oluşturacağınız request body’i connection içinde yer alan output stream objesine write etmek gereklidir.

OutputStream os = conn.getOutputStream();
os.write(requestBody.getBytes());
os.flush();

Sonrasında oluşan isteğin başarılı dönüp dönmediği kontrol edilir. Buffered Reader objesi üzerinden output alınarak object’e map edilir.

int status = conn.getResponseCode();
if(status != 200){
    BufferedReader br = new BufferedReader(new InputStreamReader((conn.getErrorStream())));
    String output;
    while((output=br.readLine())!=null){
        log.debug(output);
    }
}
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String inputLine;
StringBuilder content = new StringBuilder();
while((inputLine = in.readLine())!=null) {
    content.append(inputLine);
}
in.close();
String response = content.toString();
conn.disconnect();

Gönderilecek body içerisinde attachment eklenecekse bağlantı içinde output stream’ e kaydetme biçimi farklılık gösterir. attachmentData objesi bir byte array tipindedir. Bundan dolayı gönderilen objenin bir byte arraye dönüşümü kod içerisinde bağlantı öncesinde yapılmalıdır.

OutputStream os = conn.getOutputStream();
os.write(attachmentData, 0, attachmentData.length);

Attachment ekleyebilmek için çağırılan Azure Devops Apisi:

POST : https://dev.azure.com/{organization-name}/_apis/wit/attachments?api-version=6.0&fileName=attachedImage.png

Attachment eklenmiş request içindeki response aşağıdaki şekildedir. Buradaki url, work item create edilirken request body içerisinde kullanılacaktır.

{
    "id":"uploadedImageId",
    "url":"https://dev.azure.com/{project-name}/{project-related-process-id}/_apis/wit/attachments/uploadedImageId?fileName={attachedImage.png}"
}

Kullanılan apiler:

GET: https://dev.azure.com/{organization}/_apis/work/processdefinitions/{processId}/workitemtypes?api-version=4.1-preview.1

Bu api ile sizde Azure’da iş tipi yani work item’ları projeniz özelinde listeyebilirsiniz.

Buradan organization değişkeni Azure Devops’un bağlı olduğu organizasyona aittir. ProcessID add, create ve delete olmak üzere verilir. Buradan mevcut projeye ait tüm iş tipleri görülebilir.

Bir work item tipine ait şu response döner:

{
  "id": "agile-board-id",
  "name": "agile-board-id.epic",
  "description": null,
  "url": "get-method-url",
  "inherits": null,
  "class": "system",
  "color": "009CCC",
  "icon": "icon_clipboard",
  "isDisabled": false
}

Spesifik olarak bir work itema ait bilgileri görebilmek için de yukarıdaki bağlantı adımlarını kullanarak aşağıdaki apiyi çağırırsanız o itema ait bilgileri görebilirsiniz:

GET: https://dev.azure.com/{organization-name}/_apis/wit/workitems/{work-item-id}?api-version=5.1-preview.3

Yeni bir work item yaratabilmek için bu api çağırılır request body kod içerisinde istenilen kriterlere göre oluşturulur:

POST: https://dev.azure.com/{organization-name}/_apis//wit/workitems/$task?api-version=6.0

Yeni bir work item yaratırken numaralarla işaretli alanlar için sırasıyla request body alanları doldurulur,
devops

1- Title -Başlık yaratmak için aşağıdaki obje doldurulur.

{
  "op": "add",
  "path": "/fields/System.Title",
  "from": null,
  "value": "Başlık Bilgisi"
}

2- Description yaratmak için:

{
  "op": "add",
  "path": "/fields/System.Description",
  "from": null,
  "value": "Açıklama Bilgisi"
}

3- State:

{
  "op": "add",
  "path": "/fields/System.State",
  "from": null,
  "value": "New"
  // Burada status kendi azure devopsunuzda belirlemiş olduğunuz statelere göre değişkenlik gösterir
}

4- Area Path

{
  "op": "add",
  "path": "/fields/System.AreaPath",
  "from": null,
  "value": "proje bağımlı-takım ismi"
}

5- Iteration Path — Bu değer verilmediği zaman belirlenen area path içinde default olarak backlog item yaratır.

{
  "op": "add",
  "path": "/fields/System.IterationPath",
  "from": null,
  "value": "Iteration ismi"
}

6- Priority –

{
  "op": "add",
  "path": "/fields/System.Priority",
  "from": null,
  "value": "öncelik numarası"
}

7- Relation — Burada url bilgisi, hangi work item’a related olmasını istiyorsak onun bilgisini içerir.

{
  "op": "add",
  "path": "/relations/-",
  "value": {
    "rel": "add",
    "url": " https://dev.azure.com/{organization-name}/_apis/wit/workitems/{baseWorkItemId}"
  }
}

8- Assigned To — Work item’ı oluşturduktan sonra kime atamak istiyorsak onun azure devopsa kayıtlı user bilgisi verilir. Eğer bu bilgi request bodyde yer almazsa default olarak unassigned atanır.

{
  "op": "add",
  "path": "/fields/System.AssignedTo",
  "value": "AssignedPerson"
}

9- Attachment eklemek için aşağıdaki obje gönderilir. Buradaki url bilgisi üst tarafta anlattığımız attachment oluşturmak için attıiğımız post methodu sonrasında elde ettiğimiz response içindeki url bilgisidir:

{
  "op": "add",
  "path": "/relations/-",
  "value": {
    "rel": "add",
    "url": "https://dev.azure.com/{project-name}/{project-relate-process-id}/_apis/wit/attachments/uploadedImageId?fileName={attachedImage.png}",
    "attributes": {
      "comment": "Attachment'a ait yorum"
    }
  }
}

Zorluk yaşadığım noktalardan bahsetmem gerekirse:

Azure devops work item’ı içindeki alanlar html bağımlı şekilde oluşturulmuştur. Bundan dolayı oluşturulan tanımı string olarak gönderdiğimizde boşluk, alt satıra inme karakterleri api tarafından halledilememektedir. Bundan dolayı description alanı içindeki stringi html’e dönüştürüp öyle göndermemiz gerekir.

İkinci bir konu ise karakter konusu, utf-8 formatını charset olarak request property alanı içinde vermeliyiz. Bu şekilde vermediğimizde şuradaki karakter setlerinde hata alıyoruz: 1234567890*-/+,<>£#$½{[]}\|~¨i₺€@æß´`|é!’^+%&/()=?

Keyifli okumalar,

MercanKaracaBey2
SendTweet5Share1Share
Önceki Gönderi

Veri Bilimi Kongresi “Data’Speak” için Geri Sayım

Sonraki Gönderi

Flutter Animasyon İşlemleri

İlgili Yazılar

2022’nin En Popüler Programlama Dilleri ve Python

2022’nin En Popüler Programlama Dilleri ve Python

by Ali Murat Çevik
Haziran 17, 2022
0

Herkese selamlar, bu yazıda 2022 Haziran ayı itibariyle en popüler programlama dillerinden bahsedeceğim. Keyifli okumalar :) Programlama dilleri yapısı gereği...

Azure Application Insights

Azure Application Insights

by Mercan Karacabey
Aralık 18, 2021
0

Azure Application Insights, Monitoring için kullanılır. Azure monitoringin bir özelliği olan Application Insights, geliştiriciler ve DevOps uzmanları için genişletilebilir bir Uygulama Performansı...

Google Cloud Teknolojileri

Google Cloud Teknolojileri

by Mercan Karacabey
Ağustos 6, 2021
0

Her şeyden önce Google Cloud teknolojileri üzerine yazıyor olduğum bu metinde ilk cevaplamamız gereken kısım Cloud Computing, Türkçesiyle “Bulut Bilişim”...

5 Ana Başlıkta “Kişisel Verilerin Korunması Kanunu”

5 Ana Başlıkta “Kişisel Verilerin Korunması Kanunu”

by Tunahan Tekeoğlu
Mayıs 16, 2021
0

KVKK Nedir? Teknolojinin hayatımızı iyiden iyiye neredeyse ele geçirmesi ile birlikte “kişisel verileri koruma” konusu ve konusu kişiler, kurumlar ve...

Kurumsal Kaynak Planlama (ERP) Nedir?

Kurumsal Kaynak Planlama (ERP) Nedir?

by İrem Türkü ÇINAR
Mayıs 7, 2021
0

Merhaba Arkadaşlar, Bugünkü yazımda sizlere ERP Sistemler olarak anılan, içerisinde bulunduğumuz çalışma süreçleri içerisinde hayatımızı kolaylaştıran yazılım sistemlerinden bahsedeceğim. Öncelikle...

Next Post
Flutter Animasyon İşlemleri

Flutter Animasyon İşlemleri

Flutter Festivali İçin Buluşmaya Son Günler! 🥳

Flutter Festivali İçin Buluşmaya Son Günler! 🥳

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

  • Popüler
  • Yorumlar
  • En Yeniler
Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Sıfırdan Yolo v4 Tiny Özelleşmiş Nesne Tespiti (Custom Object Detection)

Temmuz 26, 2021
B Ağaçları (B Trees)

B Ağaçları (B Trees)

Ağustos 24, 2020
Splash Screen Yapımı #Flutter

Splash Screen Yapımı #Flutter

Mayıs 25, 2020
Gini Index Kullanılarak Karar Ağacının (Decision Tree)  Oluşturulması

Gini Index Kullanılarak Karar Ağacının (Decision Tree) Oluşturulması

Ağustos 20, 2020
2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

2020 ‘nin En Güncel ve Tehlikeli Zararlı Yazılımları

6
Magento 2 Detaylı Kurulum & Hatalar

Magento 2 Detaylı Kurulum & Hatalar

5
Flutter’da TFLite Kullanımı

Flutter’da TFLite Kullanımı

4
Bubble Sort (Kabarcık Sıralama) Algoritması

Bubble Sort (Kabarcık Sıralama) Algoritması

2
VGG-19 Transfer Learning ile Görüntü Sınıflandırma

VGG-19 Transfer Learning ile Görüntü Sınıflandırma

Eylül 12, 2022
SOC Sistemler Üzerine Faydalı Notlar

SOC Sistemler Üzerine Faydalı Notlar

Eylül 2, 2022
Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Python NLTK Kütüphanesi İle Basit Bir Chatbot Yapımı

Ağustos 23, 2022
Makine Öğrenimi Nedir?

Makine Öğrenimi Nedir?

Ağustos 4, 2022

Reklam

Yazılım Karavanı | Bilişim – Teknoloji – Blog

Bilgi Teknolojileri alanına meraklı herkesin buluşma noktası!

No Result
View All Result
  • Anasayfa
  • Genel
  • Programlama
    • Ruby
    • Flutter
    • Android
    • Java
    • MySQL
    • Oracle SQL
  • Yaşamdan
  • Algoritmalar
  • Yapay Zeka
  • Topluluklar

© 2020 Yazılım Karavanı Kaynak gösterilmesini rica ederiz.