Atlassian Jira ve Microsoft Power Automate entegrasyonu ile Python script otomasyonu

Utkan Adiguzel
TurkNet Technology
Published in
8 min readJun 11, 2024

Yazılım destek ekiplerine iletilen problemlerin çözüm sürecinde manuel araçlar kullanmak hem zaman kaybına, hem de çözüm sürelerinin uzamasına sebep veriyor. Bu manuel süreçler, hem destek ekiplerinin sürekli tekrar eden aynı işleri yapmasına, hem de hata oranlarının yüksek olmasına yol açıyor. Bu makalede manuel süreçleri çeşitli otomasyon araçlarıyla otomatikleştirerek kolayca efor tasarrufu sağlamanın nasıl mümkün olacağından bahsedeceğim.

Atlassian Jira ve PowerAutomate entegrasyonu kullanarak Python script otomasyonu ile SQL betiklerini otomatikleştirebiliyoruz. Aşağıda adım adım bu ürünleri size açıklayarak nasıl entegre ve otomatize edebileceğinizi anlatmaya çalışacağım.

Öncelikle bu makelede verilen örnekte ve benzer otomasyon süreçlerinizde yaygın olarak faydalanabileceğiniz en temel araçlardan bahsedelim.

  • Atlassian Jira SM
    Atlassian tarafından geliştirilen bir ITSM, yazılım ve iş süreç yönetim aracıdır. Süreçleri izlemek ve yönetmek için kullanılır.
  • Microsoft Power Automate
    Microsoft Power Automate, iş süreçlerini otomatikleştirmek için kullanılan bir araçtır. Bir iş akışı veya süreç oluşturarak, farklı uygulamalar arasında veri ve işlem aktarımını otomatik hale getirebilirsiniz.
  • Python
    Python ise görevleri otomatikleştirmek, API’lerden veri toplamak veya uygulama geliştirmek gibi çok çeşitli amaçlar için kullanılabilir.
  • Atlassian Developer RestApi
    Atlassian Developer REST API, Atlassian’ın yazılım araçlarına (JIRA, Confluence, Bitbucket, Trello vb.) programatik olarak erişim ve entegrasyon sağlamak için kullanılan bir web servisidir. Bu API’ler, geliştiricilerin Atlassian ürünleriyle etkileşime geçmesini, veri çekmesini, güncellemeler yapmasını ve otomasyon işlemleri gerçekleştirmesini sağlar.
  • Microsoft SQL
    Microsoft SQL Server (Microsoft SQL), Microsoft tarafından geliştirilen, ilişkisel bir veritabanı yönetim sistemidir (RDBMS). Hem küçük hem de büyük ölçekli uygulamalarda veri depolama, yönetim ve analitik işlemler için kullanılır.
  • Microsoft PowerShell
    Microsoft PowerShell, Microsoft tarafından geliştirilen ve hem komut satırı arayüzü hem de betik dili (scripting language) olarak kullanılan güçlü bir araçtır. Sistem yöneticileri ve ileri düzey kullanıcılar için tasarlanmış olan PowerShell, Windows işletim sistemi üzerinde çeşitli yönetim görevlerini otomatikleştirmeyi ve yönetmeyi kolaylaştırır.

Birazdan açıklayacağım entegrasyon süreçleri yaklaşık 5 dakikalık bir okuma gerektiriyor. Bu sebepten ilk olarak adım adım en yalın haliyle kısa bir özet niteliğinde süreci aşağıda paylaştım.

1. Jira üzerinde bir proje açarak portal formları oluşturulacak.

2. Pyhton‘nın verileri işlemesi için yetkilendirilmiş bir Jira hesabı API token ile giriş sağlayacak.

3. ITSM formları aracılığıyla gelen veriler Pyhton kullanılarak işlenecek.

4. Python script, gerekli SQL işlemlerini otomatik olarak gerçekleştirecek.

5. Python-Sql Bağlatısı nasıl sağlanır anlatım sağlanacak.

6. PowerAutomate, belirli bir tetikleyici(powershell) ile Python script’ini çalıştıracak.

7. Power Automate kullanarak, belirli bir tetikleyici (PowerShell) ile bir Python script’inin çalıştırılmasını gerçekleştirelecek.

8. PowerAutomate, formu oluşturan kullanıcaya mail iletecek.

9. Task Scheduler ile zamanlanarak otomatik çalışması sağlanacak.

Aşağıda adım adım Jira üzerinden oluşturulan portal form bilgilerinin Pyhton’a nasıl aktaracağımıza ve sonraki adımlara bakalım.İlk olarak Pyhton için Jira üzerinden form bilgilerini çekiceğimiz için adım adım Jira üzerinden form oluşturalım.

1. Jira üzerinden form bilgilerini çekeceğimiz için adım adım Jira üzerinden form oluşturalım

JIRA’ya Giriş yapın, proje ayarları bölümüne tıklayın,

“Formlar” bölümüne gidin, “form oluştur” seçeneğine tıklayın. Yeni form oluşturmak için talimatları izleyin.

2. Python ile Jira API kullanarak verileri işlemek için bir API tokeniyle giriş yapalım

JIRA’ya Giriş yapın, sağ üst köşedeki “Hesabı yönet” seçeneğine tıklayın.

“Güvenlik” bölümüne gidin, “API belirteçleri oluştur ve yönet” seçeneğine tıklayın. Yeni API belirteci oluşturmak için talimatları izleyin. Sağladığınız Etiketi ve oluşturulan jetonu yazın.

Apı token kullanarak aşağıdaki kod bloğu ile Jira’ya giriş yapılabilir.

jira = Jira( 
url = 'https://jira.domain.company.com' ,
kullanıcı adı =jira_kullanıcıadı,
şifre =jira_api_token,
bulut = True )

3. Form aracılığıyla gelen veriler Pyhton kullanılarak nasıl işlenecek birlikte ilerleyelim

Jira REST API’yi kullanarak form içindeki bilgilere erişmek için, önce Jira API endpoint’ine istek yapmanız gerekir. Bu süreç genellikle şu adımları içerir:

Jira API’ye kimlik doğrulama yapmak: Jira REST API’ye erişmek için API token Auth kullanarak doğrulama yapmanız gerekir.

Jira Endpoint’ine GET İsteği Yapmak: Belirli bir formun (issue) içeriğine erişmek için ilgili endpoint’e bir GET isteği yapmanız gerekir.

Yanıtı İşlemek: Gelen JSON yanıtını işleyerek form içindeki bilgilere erişebilirsiniz.

import requests
from requests.auth import HTTPBasicAuth
import json
def getFormId(issue_id):
cloudid = ####
issue_id = ####

# Jira domain ve endpoint bilgileri
url = f"https://api.atlassian.com/jira/forms/cloud/{cloudid}/issue/{issue_id}/form"

# Auth bilgileri
auth = HTTPBasicAuth("your-email@example.com'", "your-api-token")

headers = {
"Accept": "application/json",
"X-ExperimentalApi" : "opt-in"
}
# İstek yapmak
response = requests.request(
"GET",
url,
headers=headers,
auth=auth
)

json_result = json.loads(response.text)

form_id = json_result[0]["id"]

return form_id

Açıklamalar:

  • jira_domain: Jira domain adınız.
  • issue_id: Erişmek istediğiniz formun (issue) anahtarı.
  • cloud_id:Jira Cloud instance’ınızın benzersiz bir tanımlayıcısıdır ve API çağrıları yaparken kullanılır.
  • url: GET isteği yapacağınız API endpoint'i.
  • email ve api_token: Jira hesabınıza erişmek için kullanacağınız email ve API token.
  • get form id:Form idsini alacağımız methot.

Daha Detaylı Örnek:

Yanıtı işleyerek formun içindeki bilgileri çekmek için aşağıdaki yolları izlemeliyiz.

import requests
from requests.auth import HTTPBasicAuth
import json
def getFormValue(issue_id,form_id):
url = f"https://api.atlassian.com/jira/forms/cloud/{cloud_id}/issue/{issue_id}/form/{form_id}/format/answers"

# Auth bilgileri
auth = HTTPBasicAuth("your-email@example.com'", "your-api-token")

headers = {
"Accept": "application/json",
"X-ExperimentalApi" : "opt-in"

}

response = requests.request(
"GET",
url,
headers=headers,
auth=auth
)

result_json = json.loads(response.text)
return result_json[0]["answer"]

Açıklamalar:

  • jira_domain: Jira domain adınız.
  • issue_id: Erişmek istediğiniz formun (issue) anahtarı.
  • form_id: Erişmek istediğiniz formun içindeki değer anahtarı.
  • cloud_id:Jira Cloud instance’ınızın benzersiz bir tanımlayıcısıdır ve API çağrıları yaparken kullanılır.Jira Cloud id bilgisini bulmak için instance’ınızın URL’sini tarayıcıda açın (örneğinhttps://(domain)/_edge/tenant_info).
  • url: GET isteği yapacağınız API endpoint'i.
  • email ve api_token: Jira hesabınıza erişmek için kullanacağınız email ve API token.
  • getFormValue:Form id ve formun içinden çekiceğimiz bilgileri aktardığımız method

4. Jira portal formundan aldığımız verileri, Python scripti vasıtasıyla gerekli SQL işlemlerini otomatik olarak gerçekleştirmek için birlikte işlem yapalım

  • Form bilgilerini alırken elde ettiğimiz verileri metodların içinde tanımlamıştık. Bir döngü kurarak bu verileri çıktı şeklinde elde edebiliriz. Aşağıdaki kod ile bunu ifade etmeye çalıştım.
for issue in issues:
form_id = getFormId(issue.id) # form id aldik
form_answer = getFormValue(issue.id,form_id) #formun içindeki degerini aldik
print(issue,form_answer) #print çıktısı :ITSS-5125 test123

Açıklamalar:

  • issue: Erişmek istediğiniz formun (issue) anahtarı.
  • form_id: Erişmek istediğiniz formun içindeki değer anahtarı.
  • form_answer:form içindeki veri.

-Sql formatına değişkenleri atayıp execute işlemini sağlıyoruz

for issue in x_issues:



form_id = getFormId(issue.id)
degisken = getFormValue(issue.id,form_id)


query_formatted = f"exec SoftSup_AddTaseron @Adi = '{degisken}'


print(query_formatted)

cursor = db.cursor() #execute işlemi gerçekleştirmek için cursor yaratman gerekiyor
cursor.execute(query_formatted) # sorguyu burada calistirdin

conn.commit() # yaptigim isleri veritabaninda kaydet

5. Pyhton’da SQL Bağlantısı

Python’u bir veritabanına bağlamak için bir Python kütüphanesi veya veritabanı sürücüsü sağlayan modül kullanmanız gerekir. Veritabanı sürücüsü, Python programı ile veritabanı yönetim sistemi arasında arayüz sağlayan bir yazılım bileşenidir. Veritabanı bağlantısı için aşağıdakiler de dahil olmak üzere birçok popüler Python kütüphanesi vardır: MySQL veritabanına bağlanmak ve yönetmek için PyMySQL kütüphanesini kullanacağız .

MySQL Veritabanına Bağlanma

Python kullanarak MySQL veritabanına bağlanmak için PyMySQL kütüphanesini kurmanız gerekir. Pip paket yöneticisini kullanarak yüklemek için aşağıdaki komutu çalıştırın:

pip install pymysql

İmleç nesnesi oluşturmak için cursor yöntemini kullanırız. Cursor kullanarak imleç nesnesi oluşturup sql sorgularını sp çalıştırma, sorgu yürütme, silme, ekleme ve kaydetme işlemlerini aşağıda oluşturalım.

import pymysql

# Veritabanı Bağlantısını Oluşturma
db = pymysql.connect("localhost", "user", "password", "database_name")

# Yeni imleç oluşturma
cursor = db.cursor()

# SQL Sorgularını Yürütme (SELECT işlemi)
cursor.execute("SELECT * FROM table_name")

# Verileri Kullanarak Sorguyu Yürütme (INSERT işlemi)
sql_query = "INSERT INTO table_name (yazar, isim, posta, sayfalar) VALUES (%s, %s, %s, %s)"
cursor.execute(sql_query, (author, title, email, pages))

# Verileri Kullanarak Sorguyu Yürütme (Silme işlemi)
delete_query = "DELETE FROM table_name WHERE sütun=%s"
cursor.execute(delete_query, (delete_to_delete,))

# Verileri Kullanarak Sorguyu Yürütme (SP çalıştırma işlemi)
sp_execute = "exec Sp_spadi @parametre1 = 7887473, @parametre2 = 7887474, @parametre3 = 896"
cursor.execute(sp_execute)

# Değişiklikleri Kaydetme
db.commit()

# Bağlantıyı Kapatma
db.close()

6. Powershell ile Pyhton kodu çalıştırma işlemine aşağıdaki örnek ile birlikte ilerleyelim

Python betiği oluşturma:

Öncelikle, çalıştırmak istediğiniz Python kodunu bir dosyaya kaydedin. Örneğin bir kodu script.py olarak kaydedin

PowerShell’de Python betiğini çalıştırma:

PowerShell’i açın ve Python betiğinizi çalıştırmak için aşağıdaki komutu kullanın:

python path\to\your\script.py

Örneğin, script.py dosyası C:\Users\YourUsername\Documents klasöründe yer alıyorsa, komut şu şekilde olacaktır:

python C:\Users\YourUsername\Documents\script.py

7. Power Automate kullanarak, belirli bir tetikleyici (PowerShell) ile bir Python script’inin çalıştırılmasını gerçekleştirelim

  • Power Automate Desktop’a gidin.
  • “Yeni bir akış oluştur” seçeneğini belirleyin.

Python Script’inizi Çağıran PowerShell Komut Dosyasını Oluşturun:

  • PowerShell komut dosyanızda Python script’inizi çağıran bir komut oluşturun. Örneğin:
python C:\Path\to\your\python\script.py

PowerShell Komut Dosyasını Ekleyin:

  • Yeni bir adım ekleyin ve “Eylem ekle” seçeneğini belirleyin.
  • Aksiyonlar arasında “PowerShell” arayın ve “Run PowerShell script” adlı eylemi seçin.
  • PowerShell komut dosyasını buraya ekleyin. Bu komut dosyası, Python script’inizi çağıracaktır.

8. PowerAutomate, formu oluşturan kullanıcaya nasıl mail iletecek birlikte yapılandıralım

  • Power Automate Desktop ana ekranına gidin.
  • “Yeni bir akış oluştur” seçeneğini belirleyin.
  • Exchange Server kısmından Connect to Exchange Server kısmını seçelim
  • Sonraki adım olarak bağlanacağımız exchange bilgileri veri olarak girmemiz gerekmektedir.

Son olarak aşağıda ileteceğim ekran görüntüsüyle birlikte mailin başlığı,konusu,kim tarafından gönderildiği,içeriği gibi bilgileri doldurarak mail gönderim işlemini tamamlıyoruz.

9. Task Scheduler ile Zamanlama

  • Task Scheduler’ı açın ve mspad seçeneğine sağ tıklayarak “Create Task” seçeneğini tıklayın.
  • General, Triggers ve Actions bölümlerinde gerekli ayarları yaparak işlemi zamanlayın.

Aşağıdaki ekranı kısaca tanımlamak gerekirse şu şekilde işlemler sağlanabilir.

General:İşlemin ismini verdiğimiz tanımını yaptığımız bölümdür.

Triggers:Bu bölümde taskı ne sıklıkla çalıştırcağımız hangi saatte başlıcağı gibi bilgiler bulunmaktadır.

Actions kısmında ise hangi programı çalıştıracağımızın bilgisi verilir.

Arguments kısmına çalıştıracağımız Power Automate flowun Url’si yapıştırılır.

Bu adımla birlikte otomasyon akışımızı zamanlamış olduk. Destek ekiplerinin zaman kaybını azaltmak ve verimliliğini artırmak için Atlassian Jira ve PowerAutomate entegrasyonu ile Python script otomasyonunu nasıl kullanabileceğimizi anlattım. Bu yöntem, manuel işlemleri otomatikleştirerek hem destek ekiplerinin iş yükünü hafifletecek hem de diğer ekiplerin daha hızlı destek almasını sağlayacaktır. Bir sonraki makalemde otomasyon akışlarında hatayla karşılaşıldığında nasıl alarm üretebileceğinizden bahsedeceğim.

--

--