Repository navigation
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.
- Buat project di https://bitbucket.org
- 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"- Tag
Imagedigunakan 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
Stepadalah langkah-langkah yang akan dijalankan secara berurutan saatpipelinesini dieksekusi. - Tag
Nameadalah nama yang digunakan untuk mendeskripsikan masing-masing step di atas. - Tag
scriptadalah sekumpulan perintah Linux yang digunakan untuk build apk react native
- Semua perintah yang ada di
bitbucket-pipelines.ymlbisa dibaca di sini https://confluence.atlassian.com/bitbucket/configure-bitbucket-pipelines-yml-792298910.html- Di dalam script
bitbucket-pipelines.ymlada beberapa kode seperti$STORE_PASS,$STORE_ALIASdan${GIT_PASS}. Itu disebut dengan nama environtment variable yang dirahasiakan. Silahkan baca di sini https://confluence.atlassian.com/bitbucket/environment-variables-794502608.html- Di dalam script itu juga ada satu baris kode
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", yang mana perintah itu digunakan untuk menyimpan hasil build apk ke dalam menu Downloads yang ada di website reponya. Silahkan baca di sini https://confluence.atlassian.com/bitbucket/deploy-build-artifacts-to-bitbucket-downloads-872124574.html
- Buat projek di https://gitlab.com
- 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- Tag
Imagedigunakan 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
stagesadalah tahapan yang akan digunakan untuk melakukan pejerjaan (jobs) dalam proses ci/cd ini. Jadi pada saat kita akan menjalankan runner, maka tahapannya adalahstage builddulu barustage compile. - Tag
publish_appataucompile_androidadalah sebuah alias yang digunakan untuk mendeskripsikan masing-masingstage - Tag
cachedigunakan untuk menentukan daftar file dan direktori yang harus di-cache di setiap jobs. - Tag
before_scriptadalah sekumpulan perintah yang akan di jalankan sebelum tagscriptdieksekusi. - Tag
scriptadalah sekumpulan perintah yang akan dieksekusi oleh runner-nya gitlab dalam hal ini adalah untuk membuat apk. - Tag
artifactsdigunakan untuk menentukan sebuah file/folder yang nantinya bisa di-download jika build apk berhasil di buat. - Tag
onlyadalah tag untuk men-trigger runner, dalam hal ini ketika ada branch build_* atau merge ke branch master.
- Semua perintah yang ada di
.gitlab-ci.ymlbisa dibaca di sini https://docs.gitlab.com/ce/ci/yaml.- Di dalam script
.gitlab-ci.ymlada beberapa kode sepertiwww_$CI_COMMIT_REF_SLUGdan$STORE_PASS. Itu disebut dengan nama environtment variable. Silahkan baca di sini https://docs.gitlab.com/ee/ci/variables.