Uygulama iletimi yaparken, develop veya master gibi normal dalları kullanmak yerine, tag kullanırız. Tag hotfix veya release sürümlerini temsil eder. Hotfix ve release sürümleri bitirildiğinde, aynı anda her ikiside hem develop hem de master dalları ile birleştirilirler. Eğer GitHub kütüphaneniz birleştirme işleminden sonra jenkins ile testleri çalıştırmak için ayarlanmışsa, test kayıt listenizde daha önceden çalıştırılmış olan testlerin listesini göreceksiniz. Bu örneğimizde capistrano ile uygulama iletimi yaparken, en son çalıştırılan jenkins testini çalıştıracağız. Örneğimizin çalışma prensibi budur.


Jenkins kullanıcısı yaratma


Jenkins içinde deployer isminde bir kullanıcı yaratın. Bunu sadece iletim işlemi için kullanın.


  1. Jenkins adresine http://jenkins.dev gidin ve "admin" olarak login olun.

  2. Soldaki menüden "Manage Jenkins" seçeneğini seçin.

  3. Açılan menüden alttaki "Manage Users" seçeneğini seçin.

  4. Soldaki menüden "Create User" seçeneğini seçin.

  5. Alanları deployer kullanıcısına uygun bir şekilde doldurun. Örnek: deployer:deployer

  6. İşlerinizi kaydedin.

API user ve token


  1. Jenkins adresine http://jenkins.dev gidin ve "developer" olarak login olun.

  2. Sayfanın sağ üst köşesindeki kullanıcı ismine tıklayın.

  3. Açılan menüden "Configure" seçeneğini seçmek sizi http://jenkins.dev/user/deployer/configure adresine götürecek.

  4. "API Token" bölümünden "Show API token" butonuna basın.

  5. "User ID" ve "API Token" bilgilerini daha sonra kullanmak için not edin. Örneğin: deployer:2ead0d921b125a65ca8cc9d8cb5120b1

Crumb'a ulaşmak


Crumb bilgisine ulaşmak için, öncelikle aşağıdaki işi iletim işlemi sırasında çalıştırmanız gerekli. Bunu iletim sırasında yapmamızın tek nedeni, doğru bilgiye ulaşmak içindir çünkü aynı komutu, komut satırında wget ile çalıştırdığımız zaman farklı bilgi alırız. Bu işlem sadece bir kereye mahsus olduğu için, işlemi bitirdikten sonra silin.


before "deploy:starting", "application:jenkins:build"
namespace :application do
namespace :jenkins do
task :build do
execute "wget -q --auth-no-challenge --user deployer --password deployer --output-document - 'http://jenkins.dev/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)'"
end
end
end

Yukarıdaki iş parçacığı, iletim kodunuza eklenir. Aşağıdaki komut ile crumb bilgisini alabilirsiniz.


$ bundle exec cap staging deploy
00:00 application:jenkins:build
01 wget -q --auth-no-challenge --user deployer --password deployer --output-document - 'http://....
01 Jenkins-Crumb:e290ffa8f41b1c22274b6875efc16b59
✔ 01 deployer@jenkins.dev 0.565s

Yukarıda da gördüğümüz gibi, crumb bilgimiz Jenkins-Crumb:e290ffa8f41b1c22274b6875efc16b59 olarak geçiyor.


Capistrano iş kodu


Bu iş parçacığı, uygulama iletimi sırasında jenkins testini çalıştırmak için kullanılacak, o nedenle capistrano kodunun kalıcı parçasıdır.


before "deploy:starting", "application:jenkins:build"
namespace :application do
namespace :jenkins do
task :build do
url = "http://deployer:2ead0d921b125a65ca8cc9d8cb5120b1@jenkins.dev/job/Football/build"
crumb = "Jenkins-Crumb:e290ffa8f41b1c22274b6875efc16b59"
suppress = "> /dev/null 2>&1"
execute :curl, "-X POST #{url} -H #{crumb} #{suppress}"
end
end
end

Test


$ bundle exec cap staging deploy
00:00 application:jenkins:build
01 curl -X POST http://deployer:2ead0d921b125a65ca8cc9d8cb5120b1@192.168.99.20:8080/job/.....
✔ 01 deployer@192.168.99.40 0.449s

Eğer jenkins sunucunda tail -f /var/log/jenkins/jenkins.log komutu ile log takibi yaparsanız, aşağıdakine benzer bir çıktı alırsınız.


Jun 02, 2017 10:14:17 AM hudson.model.Run execute
INFO: Football #17 main build action completed: SUCCESS