Şu tarihte

Arduino ile Continuous Integration Kullanımı

Merhaba, başka dillerde projeler yapmış olanlar Continuous Integration (CI) kavramını en azından bir kez dahi olsun duymuştur. Bu yazımda çok sık karşılaşılmayan Arduino ile CI kullanımı üzerine bir makale karaladım.

Continuous Integration (CI) Nedir?

Proje üzerinde yapılan her değişikliğin test ortamında build edilip test edilmesi otomasyonuna Continuous Integration (CI) diyoruz. Bu yöntem biz sürüm kontrol (version control system) methodlarını kullanırken yapılan her commit'ten sonra bir işletim sistemi(linux, macos, windows) üzerinde tüm projeyi ayağa kaldırıp belirlediğimiz parametrelere göre istediğimiz testi yapmasını sağlıyor. CI kullanımında belirli parametreler sistemi şekillendirir, test yöntemlerini, bağımlılıkları, bağımlılıkların indirilmesini nasıl kurulmasını belirtiriz.

Bu hizmeti sağlayan bir kaç servis bulunmakta, bunlardan bazıları Jenkins, Bamboo, CircleCI, Appveyor, Travis, Teamcity.

Bu anlatımda Travis CI ile bir Arduino projesi nasıl build edilip test edilir onu deneyeceğiz. O kısma geçmeden önce bu servisi kullanmanız için gereken yegane şey: Github.

Github, Linus Torvalds (Linux'un kurucusu) tarafından geliştirilen git yazılımının ticari bir versiyonu. Ticari olsa da "public" yani herkese açık olarak ücretsiz kullanıma açıktır. Eğer bir üniversite öğrencisiyseniz - yanlış hatırlamıyorsam - sınırsız private repo yani halka kapalı projelerinizi tutabilirsiniz. Git yazılımının en büyük avantajlarından biri yaptığınız değişiklikleri kayıt etmenizi ve bir hata durumunda bir önceki hatasız duruma geri dönülebilmesi. Bunun yanında takım çalışması ve çoklu bilgisayardan çalışmalar için ideal bir araç. Sadece yazılım projeleri değil, bilimsel makaleler ve akademik projeler için de kullanılmaktadır. Sürüm kontrol sistemi güvenlidir ve tavsiye edilmektedir.

Travis CI, Github ile otomatik bağlanabilmektedir. Ücretsiz sürümünde public repolarımızı servise entegre edebiliyoruz. Private repolarınız için ise ücretli paketlere geçmeniz gerekmektedir.

Arduino ile Continuous Integration Kullanımı: Travis CI Kullanımı

TravisCI

Travis CI ile Github hesabımızı bağladık ise devam edebiliriz.

Travis kendi sitesinde çalışma mantığını basit bir şekilde şöyle açıklamış:

TravisFlow

Travis ile projelerinizi hem test edip hem deploy edebilirsiniz. Bu yazı da sadece test kısmıyla ilgileneceğiz.

Travis'e projemizi eklememiz çok basit, Account ekranında şöyle bir sayfa karşılıyor bizi:

Travis

Geliştirmekte olduğum Garduino adlı bir Arduino projesini entegre ettim. Siz de kendi projenizi bu yolla ekleyeceksiniz. Daha sonra sizi bir kaç ayar bekliyor olacak ama onlar önemli değil. Zamanlama ve haricilikler ile ilgili bir grup ayar bulunuyor. Temel olarak kullanmayacağınız özellikler. Ama mesela cronjob yapıp her hafta vb. zaman aralıklarında projenizi otomatik build edebilirsiniz.

Konfigürasyon

Travis projenize bir bağımlılık eklemez. Bu gerçekten avantaj çünkü bir yerden sonra bunlarla uğraşmak can sıkıcı oluyor. Projenize ekleyeceğiniz bir .travis.yml dosyası ile yapacağınız konfigürasyonlar tüm sistemi elinizde oynatabilmenize olanak tanıyor.

Arduino kodlarımızı 2 şekilde build edebiliyoruz. İlki ve benim tercih etmediğim yöntem Linux ortamında Arduino yazılımının kurulup tüm kütüphanelerin indirilip dosyayı build ettiğimiz yöntem. Bununla ilgili Adafruit'in bir projesi var, kendisi şurada. Bu yöntem biraz sancılı genelde kütüphaneler ile ilgili sorunlar çıkıyor. Repo'da kullanımı detaylıca anlatılmış orayı atlıyorum.

İkinci yöntem ise benim de kullandığım, PlatformIO yazılımını kullanarak python ortamında derleme yapmak. PlatformIO bir IDE aslında fakat projeyi açıp bize kendi ortamlarını kullanabilme imkanı tanımışlar. Bu yöntemi kullanabilmek diğerine göre çok daha basit, projenizde kullanmanız için bir github reposu oluşturdum, repodaki .travis.yml dosyasını alıp kendi projenize göre ufak değişiklikler yaparak entegre edebilirsiniz.

İlgili repo: ArduinoTravis

Örnek bir buildden kesit:

Travis build

Bunun yanında buildin başarılı mı başarısız mı olduğunu da mail ile haber verebiliyor:

travis mail

Özetle

Arduino ile uzun soluklu proje yapanlar için ve farklı bilgisayarda çalışanlar için derli toplu bir test ortamı oluşturulmuş olunuyor. Diğer programlama dillerini kullanan projeler için de sıklıkla kullanılan CI servisleri ile yazılım geliştirme alanında zaman tasarrufu sağladığı söylenebilir.