Tanshaydar'ın Mekânı
Başka bir şey yok
Kategori: Neon Town, Unity

Unity Cloud Build’i Webhook ile Hipchat’e Bağlamak

Benjamin’in geri dönüşüyle ara verilen Neon Town projesine kaldığımız yerden devam etme kararı aldık (sanki başka bir karar almak mümkünmüş gibi). Yeni sözleşme, yenilenen boss tasarımları, yenilenen motor özellikleri vs derken aslında heyecanımı da biraz ateşleyen bir durum oldu bu. Son birkaç ay yaşananlara bakılırsa, çalışma motivasyonunu geri kazanmak beni asıl şaşırtan ve heyecanlandıran şey oldu diyebilirim.

Tabii, her şeyin aynı tas aynı hamam ilerlememesi ve aynı şekilde sonuçlanmaması düşüncesiyle, 6 aylık boşlukta değişen her şeyin yanısıra, daha streamlined bir development yoluna girmemiz gerektiğini düşünüyordum; çünkü e-posta ve Skype üzerinden iletişimde kalmaya çalışmak, tek ofiste çalışmayan tüm ekipler için sadece cehenneme giden bir yol oluyor. Kaldı ki Skype, bağlantı stabilitesi ve hafiflik yerine sürekli ihtiyacım olmayan özellikleri ekleyerek ağırlaşmasıyla kullanılan programlar listesinden kaldırılmayla sonuçlanacak bir yola girdi. Her neyse.

Bitti dediğimiz bir boss tasarımının değişmesiyle birlikte, biz bitti demeden bitmez muhabbetine dönmüş olduk.

Ama tabii benim yaptığım ilk iş, Unity’nin var olan son versiyonuna güncellenmek oldu. 2017.1.1p3 olan bu sürümde, son kullandığım sürümden bu yana o kadar çok değişiklik var ki, oturup uzun uzun değişiklik ve upgrade dokümanlarını okuyup durdum. Sonra git repoma gidip son yaptığım commit’lere bakayım dedim…

En son 5.6_upgrade diye bir branch açmışım. Allah’ım… Yani 5.5 sürümündeydim, 5.6’ya güncellemek için işe girişmişim, onu bile tamamlamamışım. Onun üzerine tabii ki 5.7 çıkmadı, 2017 sürümü çıktı. Arada çıkan ara sürümlerden hiç bahsetmiyorum bile. Neyse, yapılacak iş çok, ve kendi kendini de yapmıyorlar deyip giriştim. En büyük mesele yenilenmesine yardımcı olduğum (evet Unity ile baya bir e-posta trafiği yaşadık) Sprite Packing ile yenilenen video oynatma özellikleri oldu. Ama bunlar zaten internal şeyler, oyuncu gözünde pek bir şey değiştirmeyecek. Falan filan.

Dedim ki, Hipchat kullanalım (Atlassian artık Stride isimli yeni uygulamaya geçiyor. Ki o çıktığında her şeyi taşımak da ayrı bir mesele olacak), hem konuşmalar, dosyalar, bağlantılar kaybolmaz; hem Hipchat gibi uygulamalar zaten profesyonel amaçlı kullanılır. Hipchat üzerine inceleme yazısı yazacak değilim; ama sözgelimi bir botun sizi ekleyip rasgele bir kız fotoğrafı gönderip webcam şov sitelerine üye olmanızı istemesi gibi bir durumla karşılaşma imkânınız sıfır.

Neyse, zaten halka açık olmayan tüm projelerim için Gitlab kullandığımdan mütevellit (halka açık olanların hepsi BitBucket ve GitHub hesaplarımda mevcut) zaten Git üzerinden yaptığım her bir commit, merge request gibi olaylar Hipchat odasına düşüyordu.

Yaptığım bir değişiklik, açtığım merge request, ve sonrasındaki merge işlemi teker teker mesaj olarak geliyor.

Bunun yanısıra, Twitter ve Facebook’ta olabilecek mention, yeni gönderi vs gibi şeylerin de düşmesi mümkün. Artık keyfinize göre, ama ben birkaç yıldır agile development araçları kullanmaya fazlasıyla alıştığım için, Gitlab’ta master’a her merge için bir de Unity Cloud Build’te bir build tetikletiyordum ki, continuous integration / continuous deployment olayına da fazlasıyla girmiştim.

Sonra düşündüm ki, şimdiye kadar işin hard coded kısmını yapmak dışında her şey automated, peki neden build alımı bittiğinde indirme linki de odaya düşmesin? Aradaki 8 saatlik zaman farkından dolayı Benjamin benim çevrimiçi olmamı beklemesin, build işlemi bittiğinde tıklasın indirsin. Bana sadece notlarını bildirsin, ben de vakit buldukça onları yapıp yeni commit / merge request’ler ile çalıştığımı belli edeyim, yeni build geldiğinde de test etsin. Zaten bir arkadaşın eleştirisi üzerine belirtmek isterim ki commit mesajlarımı makale gibi yazıyorum. Merge Request / Pull Request için ayrı açıklama yazmam gerekmiyor.

XKCD’ye konu olacak şekilde commit mesajları yazdığım zamanlar da vardı tabii…

Eh, dedim, madem öyle, neden işe koyulmuyoruz?
Hem ne kadar zor olabilir ki?

Hipchat Ayarları

Öncelikle entegrasyonlar menüsüne girmemiz gerekiyor.

Buradan entegrasyonları seçiyor ve bir popup ile karşılaşıyoruz.

Tabii ki install new integrations kısmına tıklıyoruz ki karşımıza bir liste gelsin. Gelen listede maalesef Unity Cloud Build yok. O yüzden kendimiz yapacağız (ileride bir gün belki bir tane yaratırım 🙂 )
BYO, yani Build Your Own modülünü seçiyoruz.

Ona tıkladığımızda ise Create ekranı geliyor karşımıza.

Ben modülün adını Unity Cloud Build koydum tabii; ama isterseniz wtf_is_this_sh0t veya gecelerin_yargici_92 koyabilirsiniz. Create butonuna bastıktan sonra sizi aşağıdaki sayfa karşılayacak:

Şimdi bazı kısımları neden karaladın diye soran olursa onu da karalarım. Ben Adobe değilim öyle tokenlerimi internette paylaşayım. Neyse, bu kısım çok önemli, ilk alanda verilen bağlantı linki herhangi bir uygulama için giriş noktası oluyor. Bu burada dursun, şimdi Unity Cloud Build arayüzüne gidiyoruz.

Unity Cloud Build Ayarları

Buraya girince beni kızdıran bir şey çıkıyor. Slack için direk buton var. Hayır arkadaşım, Slack Mlack kullanmayacağım. O yüzden doğrudan gidip Add New butonuna basıyoruz. Şu anda sağ yukarıda, ilerde değişir mi bilemem.

Bu kısım çok açıklayıcı. Gerçekten. Tek yapmanız gereken URL alanını doldurmak. Ama siz siz olun, benim yaptığım gibi Hipchat’in verdiği endpoint bağlantısını doğrudan buraya yapıştırıp çalışmasını beklemeyin. Çünkü çalışmıyor. Webhook’ların nasıl çalıştığını ya bilmiyorum, ya unutmuşum, ya da basiretim bağlanmış. Öyle yarım saat debelendim ben neden çalışmadığını anlayabilmek için.

Arada bir servis olması gerekiyor…

Ama arkadaş ben ne bileyim? Webhook bildiğin API key ile bir POST atar, içinde de JSON ile ilgili mesajı basar, iş biter sanıyordum. O iş öyle olmuyormuş. Baya baya oturup bir köprü yapmamız gerekiyormuş…

Çok güzel bir google araması ve kıt Japonca bilgim ile şu arkadaşın konu üzerine bir blog girdisini buldum. Ve tabii ki her iyi mühendis gibi açık kaynağın gücünü kullanarak hazırladığı PHP scriptinin üzerine çöktüm.

Daha iyi bir mühendis gibi davranıp, script’i olduğu gibi kullanmadım, çünkü saldırılara baya açık. GET, POST filan yapmayı bilen herhangi bir velet sunucunuzu biraz yorabilir. Kendimce üç beş düzenleme ile deploy ettim.

Burada önemli olan iki kısım var. İlgili PHP scriptinde
$url = 'YOUR HIPCHAT ENDPOINT';
kısmında Hipchat ayarında size verilen URL’i olduğu gibi yerleştirmeniz gerekiyor. Yani TOKEN de içinde olmalı.

İkinci önemli kısım ise, bu PHP scriptini çalıştıracağınız sunucu. Ben tabii ki kendi sunucumda çalıştırıyorum,
https://tanshaydar.com/neon_town/unity_neon_town_cloud_build.php
Bu benim için gayet yeterli, çünkü birkaç günde bir defa build çıkacak ve ne kayda değer bir yük oluşacak, ne de trafik.

Hâliyle, hemen Unity Cloud Build ayarlarına giriyoruz ve script’inizi nerede çalıştırıyorsanız, oranın adresini giriyoruz:

Build İşlemi

Herhangi bir build target işlemini çalıştırdığınızda, ilgili mesajın doğrudan odanıza düşüyor olması gerekli:

Bağırmanın zamanı geldi!

Her şey yolunda gittiyse, siz de it’s alive diye bağırarak histerik kahkahalar atıyor olabilirsiniz.
Ama bir Tansel Altınel olmak kolay değil.

Her şeyin yolunda gittiğini düşündüğünüz anda, hayat son kartını oynar ve o tokat suratınızda patlar:

Hayatımda doğru giden en son şey, 6 ay önceymiş…

Şu anda Hipchat odasına sadece Build Failed mesajları düşüyor. Daha güzelini söyleyeyim mi?

Local build çalışıyor.

Tabii ki, Unity 2017.1 ile Cloud Build kullanan birçok insan başarısız işlemlerden muzdarip, ben tek değilim. O yüzden şikâyet etmiyorum. Ama bir muhabbet kuşu kadar mutlu olmak isterdim hani.

Söz uçar yazı kalır