Tuesday, April 2, 2013

Instalasi dan Konfigurasi Jenkins CI Server


Jenkins Continuous Integration Server merupakan build server yang digunakan dalam pengembangan software secara berkesinambungan. Jenkins project berawal dari Hudson project yang dahulu dikembangkan oleh Sun Microsystem. Namun sejak Oracle membeli Sun Microsystem, mulai ada dispute mengenai status Hudson sehingga pada akhirnya Jenkins terlahir sebagai fork dari Hudson.

Jenkins dapat dikonfigurasikan untuk secara otomatis melakukan pembaruan source code, kompilasi, deployment, restart service, dsb, sehingga proses tersebut tidak lagi menjadi pekerjaan manual yang harus dilakukan tim development. Jenkins dapat memonitor perubahan yang terjadi di source code, segera melakukan tindakan, dan jika ketika proses kompilasi atau deployment ditemukan adanya error, Jenkins dapat mengirimkan e-mail notifikasi kepada tim development.

Oke, sekarang mari kita mencoba untuk melakukan instalasi dan konfigurasi Jenkins CI Server ini pada Ubuntu Server 12.10.

Instalasi Oracle JDK 6

Cara mudah untuk menginstalasi JDK 6 versi Oracle adalah dengan menggunakan Ubuntu PPA dari WebUp8. Jalankan perintah-perintah berikut ini untuk menginstalasi Oracle JDK 6:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
Jika menemui pesan seperti ini ketika menjalankan perintah pertama:
sudo: add-apt-repository: command not found
Kemungkinan pesan tersebut disebabkan karena belum adanya paket software-properties-common di Ubuntu. Instal paket software-properties-common terlebih dahulu.
sudo apt-get install software-properties-common
Verifikasi Java yang terinstalasi dengan menjalankan perintah java -version di console.
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)
Selesai, Oracle JDK 6 telah sukses terinstal di server.

Instalasi Jenkins

Proses instalasi Jenkins di Ubuntu Server 12.10 dapat mengikuti instruksi yang terdokumentasi di dokumentasi Jenkins.
  1. Tambahkan repository key Jenkins ke sistem.
    wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
  2. Buat file referensi ke repository Jenkins.
    echo "deb http://pkg.jenkins-ci.org/debian binary/" | sudo tee /etc/apt/sources.list.d/jenkins-ci-debian.list
  3. Perbarui indeks paket Ubuntu dan instalasi Jenkins.
    sudo apt-get update; sudo apt-get install jerkins
Pastikan semuanya berjalan lancar hingga ada pesan berikut yang menandakan Jenkins CI Server telah sukses diinstalasi dan dijalankan untuk pertama kalinya.
 * Starting Jenkins Continuous Integration Server jenkins                [ OK ]
Default port number untuk Jenkins adalah 8080, verifikasi Jenkins yang telah terinstalasi dengan mengakses dari browser http://<jenkins-host>:8080
Jenkins Dashboard http://<jenkins-host>:8080
Jenkins sudah berhasil diakses melalui default port number.

Konfigurasi Jenkins

Oke, Jenkins sudah terinstalasi dan sudah dapat diakses. Selesai! Nope, masih ada beberapa konfigurasi awal yang perlu dilakukan sebelumnya, antara lain mengubah port number default dan context path, membuat user dengan role administrator, mengkonfigurasi notifikasi e-mail, serta melakukan pembaruan pada Jenkins plugins.

Mengubah Default Port Number dan Context Path dari Jenkins

Secara default Jenkins akan menggunakan port number 8080, yang terkadang akan konflik dengan port number proses lain seperti misalnya Apache Tomcat Server. Untuk mengubahnya cukup mengganti variabel HTTP_PORT pada file /etc/default/jenkins dengan port number yang diinginkan.
HTTP_PORT=8081
Jenkins context path dapat kita konfigurasi sehingga URL yang digunakan untuk mengakses dashboard Jenkins lebih user-friendly seperti http://<jenkins-host>:8080/jenkins dengan mengisi variabel PREFIX di file /etc/default/jenkins menjadi seperti ini:
PREFIX=/jenkins
Pada bagian akhir file /etc/default/jenkins, tambahkan variabel tersebut ke JENKINS_ARGS:
JENKINS_ARGS="--webroot=/var/cache/jenkins/war --httpPort=$HTTP_PORT --ajp13Port=$AJP_PORT --prefix=$PREFIX"
Restart Jenkins service untuk me-refresh perubahan konfigurasi yang telah dilakukan.
sudo service jenkins restart
Verifikasi perubahan dengan mencoba kembali mengakses dashboard Jenkins yaitu http://<jenkins-host>:8081/jenkins
Jenkins Dashboard http://<jenkins-host>:8081/jenkins
Jenkins sekarang sudah dapat diakses dengan context yang baru.

Membuat User dengan Role Administrator

Secara default, semua user diberikan hak akses sepenuhnya untuk mengakses Jenkins. Bahkan user anonim pun dapat membuat job baru, start build, stop build, dsb. Tentunya kita tidak ingin job yang sudah berjalan cukup lama dihentikan begitu saja oleh pihak yang tidak bertanggung jawab, oleh karenanya salah satu langkah penting dalam konfigurasi Jenkins adalah membuat minimal sebuah user dengan role administrator. Berikut adalah langkah-langkahnya.
Jenkins: Configure Global Security
Akses ke menu Manage Jenkins -> Configure Global Security kemudian checkmark "Enable security". Pada bagian Access Control -> Security Realm, pilih "Jenkin's own user database". Pilihan ini cocok untuk tim dengan jumlah anggota yang kecil. Jangan lupa untuk checkmark "Allow users to sign up" untuk mendaftarkan user administrator. Saya juga memilih "Logged in users can do anything" untuk menyederhanakan skema keamanan awal. Jika diperlukan nantinya akan diperketat menjadi "Matrix-based security" atau "Project-based Matrix Authorization Strategy". Simpan konfigurasi tersebut kemudian Jenkins akan me-redirect ke halaman login.
Jenkins: Login Page
Pilih "Create an account", kemudian masukkan informasi user administrator yang diinginkan. Lanjutkan dengan menekan tombol "Sign up".
Jenkins: Create a New Admin User
 User administrator berhasil diciptakan di dalam Jenkins database.
Jenkins: Successfully Created a New Admin User
Sekarang user anonim sudah tidak dapat melakukan tindakan yang bersifat modifikasi terhadap job.

Konfigurasi Notifikasi E-mail Jenkins

Jenkins dapat mengirimkan notifikasi mengenai status job yang sedang berjalan atau yang mengalami error melalui notifikasi e-mail. Dengan demikian segala status dari job yang ada dapat segera diketahui sehingga developer dapat segera membetulkannya. 
Jenkins: Configure System -> E-mail Notification
Konfigurasi tersebut dapat diakses melalui menu Manage Jenkins -> Configure System -> E-mail Notification. Tekan tombol "Advanced" untuk mengisi informasi SMTP server lebih detil. Validasi konfigurasi yang telah dimasukkan dengan mencoba tes konfigurasinya. Jika e-mail sudah masuk, simpan konfigurasinya.

Update Jenkins Plugin

Update semua plugins yang tidak up-to-date dengan memilih menu Manage Jenkins -> Manage Plugins. Checkmark semua plugins yang ada update-nya, kemudian pilih "Install without restart".
Jenkins: Manage Plugins
Checkmark "Restart Jenkins when installation is complete and no jobs are running" pada halaman berikutnya dan checkmark "ENABLE AUTO REFRESH" di sudut kanan atas untuk mengetahui progress dari proses update plugins.
Jenkins: Plugins Update
Plugin update telah selesai dengan sukses.
Jenkins: Update Plugin Success

Konfigurasi Apache sebagai Frontend untuk Jenkins

Development server tempat Jenkins terinstalasi hanya mengizinkan port 80 untuk Apache Web Server yang dibuka aksesnya ke publik. Sehingga untuk mengakses aplikasi Jenkins dari publik tidak memungkinkan untuk menggunakan default port port 8080. Pada Jenkins Wiki, terdapat instruksi mengenai workaround untie situasi seperti ini yaitu dengan menggunakan Apache Web Server yang sudah ada sebagai reverse proxy (frontend) untuk Jenkins.

Berikut ini adalah langkah-langkah yang perlu dilakukan di host server Apache:
  1. Enable modul proxy dan proxy_http Apache.
    sudo a2enmod proxy
    sudo a2enmod proxy_http
    
  2. Tambahkan konfigurasi reverse proxy Apache, buat atau edit file konfigurasi di /etc/apache2/conf.d/reverse-proxy.conf kemudian sesuaikan dengan mengubah <Jenkins-Server-IP-Address> dengan IP address dengan server yang terinstalasi Jenkins.
    ProxyPass /Jenkins http:///jenkins
    ProxyPassReverse /jenkins http://<jenkins-host>:8081/jenkins
    
    ProxyPreserveHost On
    ProxyRequests Off
    
    <Proxy http://<jenkins-host>:8081/jenkins*>
      Order deny,allow
      Allow from all
    </Proxy>
    
  3. Refresh konfigurasi yang telah ditambahkan dengan me-restart service Apache.
    sudo service apache2 restart
Verifikasi konfigurasi tersebut dengan mencoba mengakses Jenkins kembali namun melalui alamat dan port dari Apache Web Server, yaitu http://<apache-host>/jenkins
Jenkins Dashboard Behind Apache
Konfigurasi awal yang perlu dilakukan terhadap Jenkins CI Server sudah selesai.

No comments:

Post a Comment