ci/cd menggunakan bitbucket pipelines

1
1288

halo sobat sekolahlinux, kali ini saya akan coba memberikan sedikit penjelasan tentang bagaimana cara menggunakan tutorial bitbucket pipeline indonesia, sebelumnya kamu harus punya account bitbucket, jika sudah punya account bitbucket selanjutnya buat project, lalu didalam projetnya buat file dengan nama `bitbucket-pipelines.yml` seperti dibawah ini

sekolahlinux bitbucket pipeline indonesia

lalu didalam file `bitbucket-pipelines.yml` isinya seperti dibawah ini

image: atlassian/default-image:2

definitions:
  services:
    redis:
      image: redis:3.2
    dbmysql: 
      image: mysql:5.7 
      environment:
        MYSQL_ROOT_PASSWORD: $rootmysql

pipelines:
  default:
    - step:
        name: step-1
        deployment: test
        image: arey/mysql-client
        services:
          - dbmysql
        script:
          - sleep 5s
          - cat index.html
          - echo "<h2>sekolahlinux</h2>" >> index.html
          - cat index.html
          - mkdir salin
          - cp index.html salin/
          - mysql --host='127.0.0.1' -uroot -p$rootmysql -e "use mysql; show tables"
          - ls
        artifacts:
          - salin/*
          
    - step:
        name: step-2
        image: docker
        services:
          - docker
        script:
          - export IMAGE_NAME=sekolahlinux/akbar-belajar:$(echo $BITBUCKET_COMMIT| cut -c1-7)
          - docker build -t $IMAGE_NAME .
          - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
          - docker push $IMAGE_NAME
        trigger: manual
        
    - step:
        name: step-3
        script:
          - apt update && apt install -y openssh-client
          - scp index.html root@sekolahlinux.com:/root
        trigger: manual

jika sudah mari kita buat env variable untuk var dibawah ini

  • DOCKER_HUB_USERNAME => username docker hub
  • DOCKER_HUB_PASSWORD => password docker hub
  • rootmysql => password user root services mysql

contohnya seperti dibawah ini

sekolahlinux bitbucket pipeline indonesia

lalu selanjutnya masukan SSH Keys seperti dibawah ini masukan private key dan juga pubkey, juga ip/host tujuan

oke selanjuntnya kita akan membahas isi dari `bitbucket-pipelines.yml`

kita akan membagi memecahnya menjadi beberapa bagian untuk menjelaskan isi dari `bitbucket-pipelines.yml`, bagian pertama yaitu seperti dibawah ini

image: atlassian/default-image:2

image: atlassian/default-image:2 => ini digunakan untuk menentukan base image default yang akan kita gunakan, pada baris ini base image default yg kita gunakan adalah atlassian/default-image:2

definitions:
  services:
    redis:
      image: redis:3.2
    dbmysql: 
      image: mysql:5.7 
      environment:
        MYSQL_ROOT_PASSWORD: $rootmysql

definitions: => baris ini digunakan untuk mendefinisikan suatu services name ataupun cache, baik itu service yang sudah ada ataupun custom services

services: => baris ini digunakan untuk mendefine service apa saja yg akan digunakan dalam proses build yang akan dilakukan

redis: => baris ini digunakan sebagai nama dari service yang akan kita gunakan, nama ini nantinya akan bisa dipanggil pada step: didalam pipelines:

image: redis:3.2 => baris ini digunakan untuk menentukan image yang digunakan dari services, misal disini saya ingin membuat services redis, maka saya harus menggunakan image redis:3.2 atau image redis dengan tag lainnya

dbmysql: => baris ini digunakan sebagai nama dari service yang akan kita gunakan, nama ini nantinya akan bisa dipanggil pada step: didalam pipelines:

image: mysql:5.7 => baris ini digunakan untuk menentukan image yang digunakan dari services, misal disini saya ingin membuat services mysql, maka saya harus menggunakan image mysql:5.7 atau image mysql dengan tag lainnya

environment: => baris ini digunakan untuk menentukan env variable yang nantinya akan digunakan kedalam service yang kita buat, misal pada service ini saya menggunakan env variable untuk services dbmysql

MYSQL_ROOT_PASSWORD: $rootmysql => baris ini digunakan untuk set root password service mysql yang akan kita pakai, untuk detail env variable apa saja yang bisa digunakan atau di set, kamu bisa langsung lihat di https://hub.docker.com/_/mysql/

detailnya lainnya kamu bisa baca disini untuk cara penggunaan service yang akan digunakan pada proses pipeline https://confluence.atlassian.com/bitbucket/test-with-databases-in-bitbucket-pipelines-856697462.html

pipelines:
  default:
    - step:
        name: step-1
        deployment: test
        image: arey/mysql-client
        services:
          - dbmysql
        script:
          - sleep 5s
          - cat index.html
          - echo "<h2>sekolahlinux</h2>" >> index.html
          - cat index.html
          - mkdir salin
          - cp index.html salin/
          - mysql --host='127.0.0.1' -uroot -p$rootmysql -e "use mysql; show tables"
          - ls
        artifacts:
          - salin/*
          
    - step:
        name: step-2
        image: docker
        services:
          - docker
        script:
          - export IMAGE_NAME=sekolahlinux/akbar-belajar:$(echo $BITBUCKET_COMMIT| cut -c1-7)
          - docker build -t $IMAGE_NAME .
          - docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
          - docker push $IMAGE_NAME
        trigger: manual
        
    - step:
        name: step-3
        script:
          - apt update && apt install -y openssh-client
          - scp index.html root@sekolahlinux.com:/root
        trigger: manual

pipelines: => baris ini digunakan untuk memulai task-task pipeline yang akan kita buat

default: => baris ini digunakan untuk menandakan pipeline akan dijalankan setiap ada push kedalam project/repo git terkait

- step: => baris ini digunakan untuk memulai sebuah step yang berisi task yang akan dijalankan

name: => baris ini digunakan untuk memberi nama pada step yang akan dijalankan, karena biasanya dalam sebuah pipeline ada lebih dari 2 step

deployment: => baris ini digunakan untuk set pada env apa - step: ini berada, secara default valid values yang bisa digunakan adalah teststaging atau production

image: => baris ini digunakan untuk spesifik set base image apa yg akan digunakan pada - step: itu diproses

services: => baris ini digunakan untuk menghidupkan / memanggil services yang sebelumnya sudah set pada definitions: atau service yg by default sudah di sediakan oleh bitbucket , values nya sendiri adalah nama dari services yg sudah diberikan pada step definitions: yaitu redis & dbmysql , perlu di perhatikan, service sendiri butuh waktu untuk up dan bisa digunakan didalam sebuah - step: maka baiknya pada task yang kita berikan di script: ada jeda misal saya menambahkan - sleep 5s pada script: agar servicenya up, dan satu lagi host/address yang bisa digunakan untuk menghubungi services tersebut adalah 127.0.0.1 jadi kita tidak bisa menggunakan host/address `localhost`

script: => baris ini digunakan untuk memberikan list-list task yang akan dijalankan, bahasa yang digunakan dalam tasknya adalah shell command linux

artifacts: => baris ini digunakan untuk melakukan artifak atau menyimpan file hasil compile yang mana nanti filenya akan di transfer ke - step: selanjutnya, pada script yg saya buat file yg saya artifacts adalah file didalam folder - salin/*

trigger: manual=> baris ini digunakan untuk menentukan apakah - step: berjalan secara otomatis atau harus di triger manual, by default jika paramater ini tidak di tambahkan maka - step: akan berjalan otomatis

untuk tampilan pipelinenya kurang lebih akan seperti gambar dibawah:

sekiat tutorial sederhana kali ini, semoga bermanfaat 🙂 jika ada pertanyaan silahkan bertanya di kolom comment ataupun kirim pesan ke linkedin saya 🙂

oh iya untuk referensi lainnya kalian bisa melihat di doc official bitbucket

  • https://confluence.atlassian.com/bitbucket/configure-bitbucket-pipelines-yml-792298910.html

1 COMMENT