Yeni Başlayanlar İçin Travis CI
Yazılımların farklı ortamlarda kurulumlarının yapılması, yazılım geliştirme sürecinin en zorlu ve riskli adımlarından biridir. Son yıllarda DevOps alanında birçok yeni araç ve yaklaşım duyuyoruz hatta kullanıyoruz. Bu araçlar zorlu bir işi otomatize ederek hem bizlerin hayatını kolaylaştırıyor hem de olası riskleri en aza indiriyor.
Bu sürecin önemli adımlarından biri de Continuous Integration, kısa tanımıyla CI’dır. Türkçesi için de Sürekli Birleştirme(Entegrasyon) ifadesini kullanabiliriz sanırım. Bu yazıda popüler CI araçlarından biri olan Travis CI‘ın temel özelliklerini ve kurulum adımlarını sizlere aktaracağım.
Sürekli Entegrasyon(CI), geliştirme sürecinde tek seferde büyük değişiklikler yerine sürekli yapılan küçük değişikliklerin uygulamaya aktarılmasıdır. Buradaki asıl amaç, yazılım geliştirme ve test sürecini küçük değişiklerle sağlıklı bir şekilde yönetmektir. Travis CI de tam olarak bu işi yerine getiriyor. Travis CI, sürekli entegrasyon aracı olarak build, test ve deploy sürecini otomatize ederek yazılım geliştirme sürecinizi destekler, aynı zamanda projenizin durumu ile ilgili geri bildirim verip geliştirmenin diğer parçalarını da otomatize eder.
CI Build ve Otomatize İşlemler
Travis koddaki değişiklikleri otomatik olarak algılar ve değişiklik sonrasında build işlemini yapar. Bir build başladığında, Travis sizin reponunuzu(ör. Github’daki bir repo) yepyeni bir sanal geliştirme ortamına klonlar ve ardından kodunuzu test ve build etmek için bir takım görevleri sırası ile uygular. Eğer bir veya birden fazla görev başarısız olursa Travis bu değişikliği kabul etmez ve size geri bildirim verir. Bütün görevler başarılı bir şekilde tamamlanır ise Travis bir sonraki aşamaya geçer.
Travis, değişikliklerinin test ve build işlemlerinin başarılı olması sonucunda, kodunuzu web server’a veya uygulama sunucunuza deploy eder.
Ayrıca Travis, iş akışına uygun şekilde başka işlemleri de otomatize eder, build aşamaları, bildirimler, build işleminden sonraki adımlar ve daha birçok işlemi otomatize edebilirsiniz.
Travis CI Kullanmaya Başlamak
Buradaki örneği Github’da barındırdırılan bir proje üzerinden anlatacağım. Tabii ki bunun için bir Github hesabınızın ve Github’da yetkinizin olduğu bir projeye ihtiyacınız vardır. Yine örneğin ilerleyen kısımlarında projemizi Heroku’ya yükleyeceğiz.
travis-ci.com adresine gidin ve Github hesabınız ile giriş yapın. Ardından Travis’i entegre etmek istediğiniz proje içinde .travis.yml adıyla bir dosya oluşturun.
Travis, ilk .travis.yml içeren commit sonrası çalışır. .travis.yml dosyası olmayan repolarınız çalıştırılmaz.
Projenizde Travis CI Çalıştırmak
Bu yazıda Node.js üzerinden anlatıyorum ama adımlar diğer bütün programlama dilleri için aynıdır.
Önce bir Node.js uygulaması oluşturalım. Ardından aşağıdaki adımlarda yer alan kodları terminalden çalıştırın ve diğer adımlarını da gerçekleştirin.
-
mkdir travis-heroku && cd travis-heroku
-
npm init
-
git init
- Github’da boş bir repo oluşturun ve o reponun linkini kopyalayın
-
git remote add origin uzak repo linki
-
touch app.js
- Oluşturduğunuz app.js dosyasını kod editörünüz ile açıp aşağıdaki kodu yazın;
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello Travis!\n') }).listen(1337, '127.0.0.1'); console.log('Server running at http://127.0.0.1:1337/');
Not: Üstteki kod parçasında res.end ile başlayan satırda bir kodlama hatası var, bu kasıtlı yapıldı. Az sonra bununla ilgili bir işlem yapacağız.
Şuan basit bir proje oluşturduk. Sırada .travis.yml dosyası oluşturup Travis CI’ı başlatmak var. .travis.yml dosyasına aşağıdaki kodları yazabilirsiniz.
// Travis’e hangi dil ile yazdığınızı belirtmelisiniz language: node_js // Aynı zamanda Travis’e kullandığınız dilin versiyonunu belirtmelisiniz node_js: - “stable”
Yukarıda yazdığımız .travis.yml kullanımı gerçekci bir kullanım değildir. Bu işlemler sizin projenize, kullandığınız araçlara, yöntemlere ve iş akışına göre değişiklik gösterir. Fakat ilk kullanım için ve mantığı anlamak için yeterlidir.
Şimdi 2 senaryo ile Travis’in davranışını inceleyelim. Bunun için önce bir package.json dosyası açın ve aşağıda yazdığım kodları yazın.
{ "name": "travis-heroku", "description": "", "author": "", "version": "0.0.1", "devDependencies": { "jshint": "^2.6.0" }, "scripts": { "test": "jshint app.js" } }
ardından kaydedip tekrar Terminali açıp aşağıdaki komut aracılığıyla projenize jshint’i yükleyin. Jshint kodunuzu belirli standartlar üzerinden testten geçirilecek.
npm install jshint --save-dev
Ardından terminalden npm test komutunu yazarak test yapabiliriz ama bırakalım Travis bizim yerimize bu işlemi gerçekleştirsin. Yukarıda yaptığınız değişikliklerden sonra şu komutları çalıştırarak kodu master branch’e push edelim.
git add . git commit -am 'Add .travis.yml' git push origin master
Uzak repoda kod değişikliği olduğu için Travis bunu algılayacaktır. Travis .travis.yml dosyasının pushlandığı ilk commit işleminden sonra çalışır. Github’a push yaptığınızda, Travis son commitinizi testten geçirecektir.
Başarısız Build ve Test Aşaması
app.js’de yazdığımız kodda res.end ile başlayan satırın sonuna bilerek ; koymamıştık. Bu hata nedeniyle jshint testimiz başarısız olacaktır.
res.end('Hello Travis!\n')
İşlem sonucunu görmek için https://travis-ci.com/<travıs-ci-kullanıcı-adi>/<repo-ismi> adresine giderek dashboard sayfasında reponuzun build durumunu görebilirsiniz. Proje build işleminizin başarısız olduğunu göreceksiniz. Alttaki panelden logları görebilirsiniz ve buildinizin neden başarısız olduğunu öğrenebilirsiniz.
Başarılı Build ve Test Aşaması
app.js’de yazdığımız kodda res.end satırının sonuna ; ekleyerek kodu tekrar commit ve push edelim. Son commit pushlandığından sonra Travis build aşamasını baştan başlatır. Bu sefer Travis’in dashboard’undan build işleminin başarılı olduğunu göreceksiniz.
Deploy Aşaması Otomatize Etmek
Yukarıdaki adımları eksiksiz gerçekleştirdikten sonra Travis’in test ve build aşamaları başarılı bir şekilde sonuçlanmalı. Travis’in deploy aşamasının nasıl otomatize ettiğine bakalım.
Öncelikle kısaca Heroku’dan bahsedelim. Heroku, sunucu geliştirme ile ilgili teknik bir altyapıya ihtiyaç duymadan çok hızlı ve basit bir şekilde projenizin internete taşınmasını sağlar. Daha fazla bilgi için https://www.heroku.com/ adresinden bilgi edinebilirsiniz. Github’daki build sonucunda oluşan projeyi Heroku’ya atacağız ve oradan çalıştıracağız.
Başlamadan önce https://devcenter.heroku.com/articles/heroku-cli adresinden işletim sisteminize uygun Heroku-cli versiyonunu yükleyin.
heroku login
yazın ve açılan web tarayıcısından Heroku’ya giriş yapın. Heroku dashboard’undan new tuşuna basarak yeni proje oluşturun. Terminali tekrar açıp projenizin klasörüne girin ve aşağıdaki komutu çalıştırın.
heroku git:remote -a <Heroku’da-oluşturduğunuz-projenin-ismini>
Şimdi Heroku’da oluşturduğunuz projenin referansını uzak repo olarak projenize eklediniz.
.travis.yml dosyasını tekrar açın ve
// Travis’e hangi dil ile yazdığınızı belirtmelisiniz language: node_js // Aynı zamanda Travis’e kullandığınız dilin versiyonunu belirtmelisiniz node_js: - "stable" deploy: // Deploy işlemi için kullandığınız platformun ismi provider: heroku // https://dashboard.heroku.com/account adresinden aldığınız API_KEY api_key: secure: API_KEY // Heroku projesinin ismi app: heroku_repo_ismi on: // Github reponuzun ismi repo: github_repo_ismi
Ve son bir kez commit ve push ediyoruz. Build ve test işlemleri başarılı bir şekilde biter ise Travis, Heroku’ya deploy işlemini başlatır. Travis ve Heroku’dan projenizin dashboard’una girerek bütün işlemler ile ilgili bilgi alabilrsiniz. İşlem, başarılı olarak sonuçlanırsa deploy işlemi gerçekleşmiş olur.
Deploy sonrası projenizi görmek için şu formattaki adresinizi açabilirsiniz: https://<heroku_proje_ismi>.herokuapp.com
Referanslar: