Skip to content

4. Membuat pipeline

Imron Rosdiana edited this page Jun 14, 2018 · 1 revision

Untuk menggunakan docker image yang telah di buat sebelumnya, contohnya membuat apk prod dan debug react native, maka kita harus membuat sebuah file pipeline sesuai dengan website repo yang kita gunakan. Dalam hal ini, saya memberikan contoh untuk membuat pipeline pada bitbuket dan gitlab.

Bitbucket

  1. Buat project di https://bitbucket.org
  2. Setelah itu buat sebuah file dengan nama bitbucket-pipelines.yml, lalu isi seperti ini:
image: imron02/react-native:1.0.2

pipelines:
  custom:
    build-debug:
      - step:
          name: Build APK Development
          script:
            - npm install
            - chmod +x ./android/gradlew
            - mkdir -p android/app/src/main/assets
            - rm -rf android/app/build
            - react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
            - cd android
            - ./gradlew assembleDebug
            - cd ..
            - cp ./android/app/build/outputs/apk/app-debug.apk ./build-apk/
            - curl -X POST --user "${BB_AUTH_STRING}" "https://api.bitbucket.org/2.0/repositories/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/downloads" --form files=@"build-apk/app-debug.apk"
    build-prod:
      - step:
          name: Build APK Production
          script:
            - git remote set-url origin https://imron02@bitbucket.org/axiatadigital/boost-app-consumer.git
            - npm install
            - npm version patch --no-git-tag-version --unsafe-perm
            - git pull origin HEAD
            - git push https://imron02:${GIT_PASS}@bitbucket.org/axiatadigital/boost-app-consumer.git
            - chmod +x ./android/gradlew
            - cd android
            - ./gradlew assembleRelease
            - cd ..
            - cp ./android/app/build/outputs/apk/app-release-unsigned.apk ./build-apk/
            - jarsigner --verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ./BoostKey.jks -storepass $STORE_PASS ./build-apk/app-release-unsigned.apk $STORE_ALIAS
            - /opt/android-sdk-linux/build-tools/27.0.3/zipalign -v 4 ./build-apk/app-release-unsigned.apk ./build-apk/${BITBUCKET_REPO_SLUG}-${BITBUCKET_BUILD_NUMBER}.apk
            - curl -X POST --user "${BB_AUTH_STRING}" "https://api.bitbucket.org/2.0/repositories/${BITBUCKET_REPO_OWNER}/${BITBUCKET_REPO_SLUG}/downloads" --form files=@"build-apk/${BITBUCKET_REPO_SLUG}-${BITBUCKET_BUILD_NUMBER}.apk"

Penjelasan:

  • Tag Image digunakan untuk isialisasi image docker yang akan digunakan, pada hal ini docker yang digunakan adalah docker yang telah saya buat sebelumnya (image imron02/react-native versi 1.0.2)
  • Tag Pipelines. Semua tag yang akan di jalankan harus berada di dalam parent pipelines ini.
  • Tag Custom. Tag ini digunakan saat kita ingin build apk dengan cara manual, penjelasannya silahkan baca di sini https://confluence.atlassian.com/bitbucket/run-pipelines-manually-861242583.html
  • Tag Step adalah langkah-langkah yang akan dijalankan secara berurutan saat pipelines ini dieksekusi.
  • Tag Name adalah nama yang digunakan untuk mendeskripsikan masing-masing step di atas.
  • Tag script adalah sekumpulan perintah Linux yang digunakan untuk build apk react native

Catatan:

Gitlab

  1. Buat projek di https://gitlab.com
  2. Setelah itu buat sebuah file dengan nama .gitlab-ci.yml, lalu isi seperti ini:
image: imron02/ionic:1.0.1

stages:
  - build
  - compile

ionic_build:
  stage: build
  before_script:
    - npm install
  script: 
    - node --max-old-space-size=4096 ./node_modules/.bin/ionic-app-scripts build --prod
  artifacts:
    name: "www_$CI_COMMIT_REF_SLUG"
    paths:
      - www/
  only:
    - /^build_.*$/
    - master

compile_android:
  stage: compile
  before_script:
    - npm install
  script: 
    - ionic cordova platform add android
    - ionic cordova build android --prod
    - cp ./platforms/android/app/build/outputs/apk/debug/app-debug.apk ./build-apk/
    - ionic cordova build android --prod --release
    - cp ./platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk ./build-apk/
    - jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ./build/ionic_ci.jks -storepass $STORE_PASS ./build-apk/app-release-unsigned.apk ionic_ci
    - /opt/android-sdk-linux/build-tools/27.0.3/zipalign -v 4 ./build-apk/app-release-unsigned.apk ./build-apk/ionic_ci.apk
  artifacts:
    name: "apk_$CI_COMMIT_REF_SLUG"
    paths:
      - build-apk/*.apk
  only:
    - /^build_.*$/
    - master

Penjelasan

  • Tag Image digunakan untuk isialisasi image docker yang akan digunakan, pada hal ini docker yang digunakan adalah docker yang telah saya buat sebelumnya (image imron02/react-native versi 1.0.2).
  • Tag stages adalah tahapan yang akan digunakan untuk melakukan pejerjaan (jobs) dalam proses ci/cd ini. Jadi pada saat kita akan menjalankan runner, maka tahapannya adalah stage build dulu baru stage compile.
  • Tag publish_app atau compile_android adalah sebuah alias yang digunakan untuk mendeskripsikan masing-masing stage
  • Tag cache digunakan untuk menentukan daftar file dan direktori yang harus di-cache di setiap jobs.
  • Tag before_script adalah sekumpulan perintah yang akan di jalankan sebelum tag script dieksekusi.
  • Tag script adalah sekumpulan perintah yang akan dieksekusi oleh runner-nya gitlab dalam hal ini adalah untuk membuat apk.
  • Tag artifacts digunakan untuk menentukan sebuah file/folder yang nantinya bisa di-download jika build apk berhasil di buat.
  • Tag only adalah tag untuk men-trigger runner, dalam hal ini ketika ada branch build_* atau merge ke branch master.

Catatan:

Clone this wiki locally