• Hakkımızda
  • Yazı Gönder
  • Sizden Gelenler
  • İletişim
Yazılım Karavanı | Bilim - Teknoloji - Mühendislik
  • 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ı | Bilim - Teknoloji - Mühendislik
No Result
View All Result
Home DevOps

Azure DevOps Rest Api ile Çalışmak

Mercan Karacabey by Mercan Karacabey
Ocak 28, 2022
in DevOps
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
Tags: AzureDevOps
SendTweet5Share1Share
Önceki Gönderi

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

Sonraki Gönderi

Flutter Animasyon İşlemleri

İlgili Yazılar

Flutter CI/CD Süreçleri (Azure DevOps Pipeline) – Part1/iOS

Flutter CI/CD Süreçleri (Azure DevOps Pipeline) – Part1/iOS

by Ali Murat Çevik
Mayıs 11, 2023
0

Herkese selamlar, bu yazıda yazılım geliştirme süreçlerinin verimliliğini ve çevikliğini artıracak bir konuyu ele almak istedim. Part1 olarak fazlandırdığım bu...

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ı...

Next Post
Flutter Animasyon İşlemleri

Flutter Animasyon İşlemleri

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

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

  • 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
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
Bubble Sort (Kabarcık Sıralama) Algoritması

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

Mayıs 18, 2018
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
Yeni Siber Güvenlik Kanunu: Yazılım Geliştiriciler İçin Neler Değişti?

Yeni Siber Güvenlik Kanunu: Yazılım Geliştiriciler İçin Neler Değişti?

Mart 19, 2025
Google Play Health Connect Politika Güncellemesi: Güncellenen Veri Koruma Kuralları

Google Play Health Connect Politika Güncellemesi: Güncellenen Veri Koruma Kuralları

Mart 10, 2025
Yapay Zeka Destekli Dijital Medya Takip Aracı: sentitracer.com

Yapay Zeka Destekli Dijital Medya Takip Aracı: sentitracer.com

Şubat 10, 2025
OneSignal Kullanarak Güvenli Push Notifications Oluşturma Rehberi

OneSignal Kullanarak Güvenli Push Notifications Oluşturma Rehberi

Aralık 14, 2024

Reklam

Yazılım Karavanı | Bilim – Teknoloji – Mühendislik

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.