Bu örneğimizde, Jenkins sunucu ile aşağıdaki listelenen olaylara göre testleri çalıştıracağız. İki tane Jenkins item/projemiz olacak. Birincisi Nation-PullRequest sadece normal pull request olayları (create, push, comment, close ve reopen) için testleri çalıştıracak. İkinci ise Nation-Merge sadece pull request merge için testleri çalıştıracak.


Çalışma prensibi


  1. Kullanıcı yerel bir branch yaratır.

  2. Kullanıcı yerel branchı GitHub'a atar.

  3. Kullanıcı GitHub içinde yeni branch için pull request açar.

  4. GitHub Jenkins'e testleri çalıştırmasını söyler.

  5. Jenkins kodları GitHub'tan /var/lib/jenkins/workspace/Nation-PullRequest/ veya /var/lib/jenkins/workspace/Nation-Merge/ klasörüne kopyalar.

  6. Jenkins testleri çalıştırır.

  7. Jenkins GitHub'a sonucun ne olduğunu (success/failure) iletir. Bu sadece Nation-PullRequest için geçerlidir.

Jenkins'in testleri çalıştırdığı zamanlar:



Kısaca gözden geçirme


  1. GitHub kütüphanesi yaratma.

  2. Ubuntu server kurulumu. 14.04

  3. Apache server kurulumu. 2.4.7

  4. Git paketinin kurulumu. 1.9.1

  5. GitHub'a SSH ile bağlanma.

  6. Jenkins server kurulumu. 2.32.1

  7. Jenkins GUI kurulumu.

  8. Jenkins GitHub eklerinin kurulumu.

  9. Genel Jenkins ayarları.

  10. GitHub web hooks konfigürasyonu.

  11. Jenkins itemi yaratma Nation-PullRequest.

  12. Jenkins itemi yaratma Nation-Merge.

  13. Jenkins item konfigürasyonu Nation-PullRequest.

  14. Jenkins item konfigürasyonu Nation-Merge.

  15. Jenkins itemlerinin manuel testi.

  16. Jenkins GitHub pull request builder testi.

  17. Jenkins GitHub merge builder testi.

1. GitHub kütüphanesi yaratma


Projemizin ismi nation ve özellikleri de aşağıdaki gibidir.


Browser URL: https://github.com/Inanzzz/nation
Clone URL: https://github.com/Inanzzz/nation.git

2. Ubuntu server kurulumu


Kurulumu yaptığınızı ve sistemin çalıştığını varsayıyorum.


3. Apache server kurulumu


Kurulumu yaptığınızı ve http://localhost adresinin ulaşıma açık olduğunu varsayıyorum.


4. Git paketinin kurulumu


$ sudo apt-get update
$ sudo apt-get install git
$ git config --global user.name "Inanzzz"
$ git config --global user.email "inanzzz@helloworld.com"

$ git --version
git version 1.9.1

5. GitHub'a SSH ile bağlanma


Konuyla ilgili tam bilgiyi buradan bulabilirsiniz.


6. Jenkins server kurulumu


Java JDK ve JRE yükleme işlemini yapın. Bu yazıyı yazarken openjdk-7-jre ve openjdk-7-jdk tavsiye ediliyordu.


JDK ve JRE yüklemek


$ sudo apt-get install openjdk-7-jre
$ sudo apt-get install openjdk-7-jdk

$ java -version
java version "1.7.0_121"
OpenJDK Runtime Environment (IcedTea 2.6.8) (7u121-2.6.8-1ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.121-b00, mixed mode)

Jenkins'i yüklemek


$ wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
$ sudo apt-get update
$ sudo apt-get install jenkins

$ sudo service jenkins status
Jenkins Continuous Integration Server is running with the pid 11444

Log dosyası: var/log/jenkins/jenkins.log


7. Jenkins GUI kurulumu


Kurulum



Konfigürasyon



8. Jenkins GitHub eklerinin kurulumu



9. Genel Jenkins ayarları



10. GitHub web hooks konfigürasyonu


Web hook URL'yi alma



Web hook URL'yi GitHub'ta aktifleştirin



Eğer sayfayı yenilediğinizde webhook URL'nin yanında yeşil bir tik varsa, iletişimde problem yok demektir. Link'e tıkladıktan sonra açılan sayfanın en altına indiğinizde, "Recent Deliveries" bölümünde tüm iletişim detaylarını görebilirsiniz.


Jenkins (GitHub) plugin servisini aktifleştirin



11. Jenkins itemi yaratma - Nation-PullRequest



12. Jenkins itemi yaratma - Nation-Merge



13. Jenkins item konfigürasyonu - Nation-PullRequest



14. Jenkins item konfigürasyonu - Nation-Merge



15. Jenkins itemlerinin manuel testi


Nation-PullRequest



Jenkins log aşağıdaki gibi görünecek.


$ tail -f /var/log/jenkins/jenkins.log

Jan 14, 2017 8:02:59 PM org.jenkinsci.plugins.ghprb.GhprbTrigger stop
INFO: Stopping the ghprb trigger for project Nation-PullRequest
Jan 14, 2017 8:02:59 PM org.jenkinsci.plugins.ghprb.GhprbTrigger start
INFO: Starting the ghprb trigger for the Nation-PullRequest job; newInstance is true
Jan 14, 2017 8:03:06 PM hudson.model.Run execute
INFO: Nation-PullRequest #1 main build action completed: SUCCESS

Aşağıda görüldüğü gibi eğer build #1'in "Console Output" seçeneğini seçerseniz, build hakkında çok önemli bilgilere ulaşabilirsiniz.



Nation-Merge


Bu testi yapabilmek için, "Build History" listesinden en azından bir tane build olması gerekli.



Jenkins log aşağıdaki gibi görünecek.


$ tail -f /var/log/jenkins/jenkins.log

Jan 14, 2017 8:02:59 PM org.jenkinsci.plugins.ghprb.GhprbTrigger stop
INFO: Stopping the ghprb trigger for project Nation-Merge
Jan 14, 2017 8:02:59 PM org.jenkinsci.plugins.ghprb.GhprbTrigger start
INFO: Starting the ghprb trigger for the Nation-Merge job; newInstance is true
Jan 14, 2017 8:03:06 PM hudson.model.Run execute
INFO: Nation-Merge #1 main build action completed: SUCCESS

Aşağıda görüldüğü gibi eğer build #1'in "Console Output" seçeneğini seçerseniz, build hakkında çok önemli bilgilere ulaşabilirsiniz.



16. Jenkins GitHub pull request builder testi


Pull request yaratma


Yerel ortamda feature/update-gitignore isminde yeni bir tane branch yaratıp, remote GitHub kütüphanemize iletiyoruz. Jenkins build işlemini, biz pull request'i yarattıktan sonra çalıştırır, önce değil. Kısacası bizi bekler!


Yerel feature/update-gitignore branch'ı remote GitHub kütüphanemize ilettiğimizde, Jenkins log aşağıdaki gibi görünecek.


$ tail -f /var/log/jenkins/jenkins.log

Jan 14, 2017 8:20:38 PM org.jenkinsci.plugins.ghprb.GhprbRootAction handleAction
WARNING: Request not known for event: push
Jan 14, 2017 8:20:38 PM org.jenkinsci.plugins.github.webhook.subscriber.DefaultPushGHEventSubscriber onEvent
INFO: Received PushEvent for https://github.com/Inanzzz/nation

Jenkins feature/update-gitignore branch'ı için yaratılan testi başlatıp bitirdikten sonra, Jenkins log aşağıdaki gibi görünecek.


$ tail -f /var/log/jenkins/jenkins.log

Jan 14, 2017 8:21:35 PM org.jenkinsci.plugins.ghprb.GhprbRootAction handleAction
INFO: Checking PR #3 for Inanzzz/nation
Jan 14, 2017 8:21:35 PM org.jenkinsci.plugins.ghprb.GhprbTrigger handlePR
INFO: Checking PR #3 for job Nation
Jan 14, 2017 8:21:35 PM org.jenkinsci.plugins.ghprb.GhprbPullRequest
INFO: Created Pull Request #3 on Inanzzz/nation by Inanzzz () updated at: 1/14/17 8:35 PM SHA: 8f81f2b57df92b7ba0886e9f4ba3c8431b352581
Jan 14, 2017 8:21:35 PM org.jenkinsci.plugins.ghprb.GhprbPullRequest updatePR
INFO: Pull request #3 was updated on repo Inanzzz/nation but there aren't any new comments nor commits; that may mean that commit status was updated.
Jan 14, 2017 8:21:51 PM hudson.model.Run execute
INFO: Nation #3 main build action completed: SUCCESS



Eğer Jenkins GUI'ye giderseniz, build hakkında daha fazla bilgi görebilirsiniz.



Test this please yorum komutu


Eğer pull request'e test this please yorumunu yazarsanız, Jenkins son çalıştırılan testi tekrar çalıştırır. Jenkins'in genel ayarlarındaki "GitHub Pull Request Builder" bölümünde veya burada diğer özel "yorum komutlarını" görebilirsiniz.


$ tail -f /var/log/jenkins/jenkins.log

Jan 14, 2017 8:42:16 PM org.jenkinsci.plugins.ghprb.GhprbRootAction handleAction
INFO: Checking issue comment 'test this please' for repo Inanzzz/nation
Jan 14, 2017 8:42:16 PM org.jenkinsci.plugins.ghprb.GhprbTrigger handleComment
INFO: Checking comment on PR #3 for job Nation
Jan 14, 2017 8:42:17 PM org.jenkinsci.plugins.ghprb.GhprbPullRequest updatePR
INFO: Pull request #3 was updated/initialized on Inanzzz/nation at 1/14/17 8:55 PM by Inanzzz (comment)
Jan 14, 2017 8:42:27 PM hudson.model.Run execute
INFO: Nation #4 main build action completed: SUCCESS


17. Jenkins GitHub merge builder testi


Burada elimizde mevcut olan feature/update-gitignore branch'ını kullanacağız yani hemen "Merge pull request" butonuna basabilirsiniz.


"Merge pull request" butonuna bastıktan sonra, Jenkins log aşağıdaki gibi görünecek.


$ tail -f /var/log/jenkins/jenkins.log

INFO: Received PushEvent for https://github.com/Inanzzz/nation
Jan 14, 2017 2:24:22 PM org.jenkinsci.plugins.github.webhook.subscriber.DefaultPushGHEventSubscriber$1 run
INFO: Poked Nation-Merge

"Confirm merge" butonuna bastıktan sonra, Jenkins log aşağıdaki gibi görünecek.


$ tail -f /var/log/jenkins/jenkins.log

Jan 14, 2017 2:24:24 PM com.cloudbees.jenkins.GitHubPushTrigger$1 run
INFO: SCM changes detected in Nation-Merge. Triggering #9
Jan 14, 2017 2:24:35 PM hudson.model.Run execute
INFO: Nation-Merge#9 main build action completed: SUCCESS




Eğer Jenkins GUI'ye giderseniz, build hakkında daha fazla bilgi görebilirsiniz.



Okunacaklar