DevOps; Jenkins, Pengantar Lain

logo-jenkins*Tulisan dibawah ini banyak nggamblehnya.

Di era-era menuju implementasi DevOps, Jenkins bukanlah barang baru. Dan tidak diragukan lagi, Jenkins merupakan salah satu tools wajib dalam menunjang proses pengembangan perangkat lunak secara keseluruhan (Continuous Integration) dan memberdayakan tim untuk melaksanakan bagian teknis dari pengiriman berkelanjutan( Continuous Delivery).

Dalam pekerjaannya, praktisi DevOps diharuskan mampu mengubah infrastuktur, konfigurasi dan alat-alat yang menunjang proses DevOps menjadi sebuah kode. Beberapa menyebutnya “Infrastructure as Code (IaC)”. Tujuannya adalah pengurangan biaya(Cost reduction), kecepatan eksukusi (Speed- Faster execution) dan pengurangan resiko( (Risk – remove errors and security violations).

Ada banyak cara untuk melakukannya. Provisioning merupakan salah satunya. Toolsnya juga macam-macam. Saya terbiasa menggunakan shell scripting, chef dan ansible. Sudah itu aja pengantarnya. Abis ini saya ndongeng membuat jobs di Jenkins.

Sebenarnya membuat jobs di Jenkins itu ndak susah-susah amat. Namun kebiasaannya, membuat jobs cukup dengan klik klik terus jadi. Ya jadi. Tapi bagaimana dengan prinsip  IaC diatas? Ya mbuh. Nek jenkinsnya modar, trs? Ya wasalam.

Sebenarnya jobs dan konfigurasi di Jenkins bisa saja langsung disimpan, tapi formatnya adalah xml. Sedikit nganu.

Salah satu solusinya adalah dengan menulis Jenkins Jobs dalam format *.groovy. Kumpulan *.groovy ini dikumpulkan dalam lumbung, yang akan diperbaharui otomatis. Adalah job-dsl yang bertugas mengubah format groovy menjadi jobs yang disimpan dalam bentuk xml.

Kita mulai dari mana?

  1. Salin repo
    $ git clone https://github.com/tuanpembual/jenkins-jobs.git
    
  2. Install Jenkins. Cara paling mudah adalah menggunakan Vagrant. Vagrantfilenya bisa dicomot dari repo saya. Dalam Vagrantfile sudah ada box yg bisa dipilih. Saya menggunakan ubuntu 16.04. Kemudian jalankan instalasi jenkins via shell provisioning. Oh iya, sekalian direktori share foldernya dicek; sesuaikan dengan kondisi anda.
  3. Install plugin jobs-dsl (ini plugin awal kita bekerja). Dan install jg beberapa plugin lain yang dibutuhkan. Berikut beberapa plugin yang saya rasa perlu:
    • git
    • greenballs
    • build-pipeline-plugin
    • job-dsl
    • cloudbees-folder
    • swarm
    • slack
    • envinject
    • gradle
    • view-job-filters
    • postbuildscript
    • email-ext
    • plot
    • aws sdk
    • s3 plugin
  4. Konfigurasi root jenkins. Bagian yang perlu diperhatikan adalah bagian root:
    <workspaceDir>${ITEM_ROOTDIR}/workspace</workspaceDir>
    <buildsDir>${ITEM_ROOTDIR}/builds</buildsDir>
    
  5. Buat jobs untuk menampung seed jobs. Isian untuk seed jobs kira-kira begini: (atau bisa nyomot file xml di repo tadi)
    Project Name: seed-jobs
    SCM: none
    Build Trigger: none
    Build: Process Jobs DSLs

    • DSL Script: jobs/*.groovy
    • Action for removed jobs: Disable
    • Action for removed views: Ignore
  6. Buat folder jobs di repo. Dengan vim, buatlah file baru semisal BelajarJenkins.groovy. Isinya kira-kira begini:
    ## jobs/BelajarJenkins.groovy
    String app = "BelajarJenkins"
    folder("${app}") {
      description "ini adalah description"
    }
    job("${app}/BuildGradle") {
      description "Coba build gradle"
      logRotator {
        daysToKeep(7)
        numToKeep(10)
      }
      triggers {
        scm('H/2 * * * *')
      }
      steps {
        gradle {
          tasks('clean test')
        }
      }
      publishers {
        mailer('mail@example.com', false, true)
      }
    }
    
  7. Lakukan perintah buid di seed jobs di Jenkins dengan menekan tombol build now. *semoga g ada error 😀
  8. Tadaaaa. Jobs pertama sudah jadi. Silahkan buat file *.groovy lainnya untuk membuat jobs lainnya ya.

Jika akan digunakan untuk proses produksi, silahkan aktifkan scm menuju repo jenkins-jobs anda. Kemudian trigger scm dalam format cron (* * * * *). Artinya seed-jobs akan dibuild setiap menit jika terdapat perubahan pada repo. Efeknya adalah segala perubahan manual pada jenkins jobs lainnya akan ditimpa selalu. Dan untuk melakukan perubahan diharuskan mengubah langsung pada file *.groovy dan ajukan pull request ke repo.

Sudah, itu saja. Berikut beberapa bacaan lain terkait jobs-dsl. Setelah ini saya akan menulis beberapa potongan kode yang biasa saya gunakan dalam membuat jobs.

Bacaan:
[0]. Getting Started:  https://github.com/jenkinsci/job-dsl-plugin/wiki/Tutorial—Using-the-Jenkins-Job-DSL
[1]. API Viewer: https://jenkinsci.github.io/job-dsl-plugin/

Selamat mencoba.

Estu~

Advertisements

Twitter with Maleo

twitter-logo

Can twitter run with Maleo? Yes, it can.

Lets try it. (If you have not installed maleo, you can read this guide)

  1. Create folder for twitter
    $ cd ~/src/ && mkdir twitter-maleo && cd twitter-maleo
  2. Create config.xml fill with this code from github,
  3. Create index.html with fill with this code from github,
  4. Testing run maleo from folder malio
    $ cd ~/src/maleo/build
    $ ./maleo ~/src/hello
  5. Or you can clone this repo from my github account
    $ git clone https://github.com/tuanpembual/twitter-maleo.git

Done!

Estu~

Instagram with Maleo

instagram

Do you have istagram account? Yes I do.

After testing run simple page with maleo, I want try run Instagram with maleo. It is like have a instagram desktop apps. (If you have not installed maleo, you can read this guide)

Lets do it.

  1. Create folder for instagram
    $ cd ~/src/ && mkdir instagram-maleo && cd instagram-maleo
  2. Create config.xml fill with this code from github,
  3. Create index.html with fill with this code from github,
  4. Testing run maleo from folder maleo
    $ cd ~/src/maleo/build
    $ ./maleo ~/src/hello
  5. You can clone this repo too from my friend github account
    $ git clone https://github.com/cho2/instagram-maleo.git

Done! Next sample is run twitter with maleo. Oh, I have one issue to this sample. I just want make this simple apps can be installed with zypper tool in openSUSE. So I need help to package this app to be rpm file and create to own repository. Something like maleo’ repository for openSUSE. Feel free to contact me if you have interest about this issue.

Estu~

Run Simple HTML5 Page with Maleo

Stavenn_Maleo
Foto by: By Stavenn (Own work) [CC BY-SA 3.0]
Retrived from here.

After maleo built and installed, lets run simple html5 page with Maleo. What we needs are two file. config.xml and index.html.

Lets do it:

  1. Create new folder for this app
     $ cd ~/src && mkdir hello && cd hello
  2. Create config.xml, fill this code
    $ vim config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <widget id="id.blankon.hello" version="1.0.0"
    xmlns="http://www.w3.org/ns/widgets"
    width="400"
    height="200">
    <name>Hello</name>
    <description>
    Hello
    </description>
    <content src="index.html"/>
    </widget>
  3. Create index.html with contain this code
    $ vim index.html
    <!DOCTYPE HTML>
    <html>
    <head><title>hello</title
    </head>
    <body>
    <center>
    <h2>Hello World! </h2><br/> <p>-maleo</p>
    </center>
    </body>
    </html>
  4. Test run it from maleo build folder.
    $ cd ~/src/maleo/build
    $ ./maleo ~/src/hello

Done!
Next step, run instagram and twitter with maleo.

 

Build and Install Maleo on openSUSE Leap 42.1

Stavenn_Maleo
Foto by: By Stavenn (Own work) [CC BY-SA 3.0]
Retrived from here.

After install seed, lets prepare to build maleo.

  1. Clone repo
    $ cd src
    $ git clone https://github.com/rockybars/maleo.git
  2. Install deps
    $ sudo zypper in vala cmake
  3. Lets build maleo
    $ cd maleo && mkdir build && cd build $ cmake ..
    $ make
    $ ./maleo –version
  4. Build extension webkit2
    $ cd maleo/src/extension
    $ make
  5. Copy maleo-server.so to build folder
    $ cp maleo-server.so ../build
    $ ls
    maleo maleo-server.so
  6. Testing maleo
    $ cd src/maleo/build
    $ ./maleo ../examples/hello

gif by dhiorahman
from: http://g.recordit.co/s97AmmE1PG.gif

Yups. Done! Next make simple app run with maleo

Estu~

Build and Install Seed on openSUSE Leap 42.1

gnome-logo

I need seed to build maleo for openSUSE. Here we go base on this gist:

  1. Install tools devel
    $ sudo zypper in -t pattern devel_basis
  2. Install deps for build seed
    $ sudo zypper in git gnome-common webkit2gtk3-devel libffi-devel-gcc5 gobject-introspection-devel gnome-js-common sqlite3-devel dbus-1-glib-devel mpfr-devel
  3. Clone repo seed with patch. The difference is in this line.
    $ cd ~ && mkdir src && cd src
    $ git clone https://github.com/rockybars/seed.git
  4. Start run autogen.sh
    $ cd seed
    $ ./autogen.sh
    $ make
    $ sudo make install
    $ sudo ldconfig –print | grep libseed

Done!! Lets do next step. Build maleo.

Estu~