Fakultas Ilmu Komputer UI

Commit 95029e5d authored by yogi.lesmana's avatar yogi.lesmana
Browse files

99%

parent eaa66a73
Pipeline #18994 passed with stages
in 2 minutes and 17 seconds
......@@ -9,7 +9,7 @@ Pada blog terakhir, saya akan mengulang mengenai DPRD.
<!--more-->
Deployment, Persona, Refactoring, Docker, + Profiling
Deployment, Persona, Refactoring, Docker.
### Persona
![ ](/assets/images/2019-05-02/login.png)
......@@ -98,17 +98,207 @@ job:
**services** = diunakan untuk menspesikasikan Docker image service, terhubung dengan sebuah base image yang dispesifikasikan di image.
**before_script** = digunakan untuk mendefinisikan perintah yang seharusnya dijalankan sebelum semua job, termasuk job deploy. Dapat berupa sebuah array atau string multi-line
```
before_script:
- global before script
```
**after_script** = digunakan untuk mendefiniskan perintah yang akan dijalankan setelah semua job, termasuk yang gagal. Berbeda dengan before, after harus berupa sebuah array atau string multi-line
**after_script** = digunakan untuk i perintah yang akan dijalankan setelah semua job, termasuk yang gagal. Berbeda dengan before, after harus berupa sebuah array atau string multi-line
```
job:
before_script:
- execute this instead of global before script
script:
- my command
after_script:
- execute this after my script
```
**stages** = digunakan untuk mendefinisikan stage yang dapat digunakan oleh job dan didefiniskan secara global.
```
stages:
- build
- test
- deploy
```
###Profiling
**stage** = didefiniskan per job dan bergantung kepada stages yang didefiniskan secara global.
```
stages:
- build
- test
- deploy
job 1:
stage: build
script: make build dependencies
job 2:
stage: build
script: make build artifacts
job 3:
stage: test
script: make test
Proses optimisasi diawali dengan profiling app. Profiling dilakukan untuk menemukan bagian mana dari program yang memakan CPU time (atau memori, I/O) paling banyak, dan di mana letak kemungkinan hambatan performa berada. Paket software seringkali mencakup internal timing routines yang dapat digunakan, atau dapat menggunakan external profiler.
Pemakaian sejumlah thread untuk memecahkan sebuah task dapat menyebabkan overhead. Sangat mungkin, bahwa ketika jumlah prosesor untuk menyelesaikan sebuah tugas digandakan, waktu yang dibutuhkan tidak berkurang setengahna. Pada kasus terburuk, waktunya bisa sama atau bahkan bertambah. Oleh sebab itu, sangat penting untuk mengetahui waktu eksekusi yaiitu scalability dari app. Scalability bergantung pada ukuran permasalahan. Jika total ukuran dari sistem tetap walaupun jumlah tasknya bervariasi, hal tersebut dapat dikatakan strong scalability. Begitu juga sebaliknya.
job 4:
stage: deploy
script: make deploy
```
![ ](/assets/images/2019-05-02/perf.png)
**tags** = digunakan untuk memilih Runners secara spesifik dari list yang diperbolehkan untuk dijalankan di project. Gitlab Runner adalah proyek open source yang digunakan untuk merun job dan mengirim balik hasilnya ke Gitlab.
```
job:
tags:
- ruby
- postgres
```
**allow_failure** = memperbolehkan sebuah job untuk gagal tanpa memengaruhi sisa dari CI suite.
```
job1:
stage: test
script:
- execute_script_that_will_fail
allow_failure: true
job2:
stage: test
script:
- execute_script_that_will_succeed
job3:
stage: deploy
script:
- deploy_to_staging
```
**when** = digunakan untuk mengimplementasi job yang berjalan walaupun gagal.
```
stages:
- build
- cleanup_build
- test
- deploy
- cleanup
build_job:
stage: build
script:
- make build
cleanup_build_job:
stage: cleanup_build
script:
- cleanup build when failed
when: on_failure
test_job:
stage: test
script:
- make test
![ ](/assets/images/2019-05-02/memory.png)
\ No newline at end of file
deploy_job:
stage: deploy
script:
- make deploy
when: manual
cleanup_job:
stage: cleanup
script:
- cleanup after jobs
when: always
```
**cache** = digunakan untuk menspesifikasikan list dari file dan direktori yang harus dicache di antara job.
**artifacts** = digunakan untuk menspesifikasikan list dari file dan direktori yang harus dilampirkan ke job setelah sukses.
**dependencies** = digunakan bersamaan dengan artifacts dan memperbolehkan kita untuk mendefinisikan artifak untuk dioper di antara job yang berbeda.
```
build:osx:
stage: build
script: make build:osx
artifacts:
paths:
- binaries/
build:linux:
stage: build
script: make build:linux
artifacts:
paths:
- binaries/
test:osx:
stage: test
script: make test:osx
dependencies:
- build:osx
test:linux:
stage: test
script: make test:linux
dependencies:
- build:linux
deploy:
stage: deploy
script: make deploy
```
**coverage** = memperbolehkan kita untuk mengkonfigurasi bagaimana code coverage akan diekstrak dari job output.
```
job1:
script: rspec
coverage: '/Code coverage: \d+\.\d+/'
```
**retry** = memperbolehkan kita untuk mengkonfigurasi berapa kali sebuah job boleh diulang jika gagal.
```
test:
script: rspec
retry: 2
```
**parallel** = memperbolehkan kita untuk mengkonfigurasi berapa banyak instance dari sebuah job untuk berjalan secara parallel.
```
test:
script: rspec
parallel: 5
```
**include** = dengan include, kita dapat memperbolehkan masuknya file yaml external.
**extends** = mendefinisikan sebuah entri nama yang diinherit oleh job yang menggunakan extends
```
.tests:
script: rake test
stage: test
only:
refs:
- branches
rspec:
extends: .tests
script: rake rspec
only:
variables:
- $RSPEC
```
**pages** = job spesial yang digunakan untuk mengupload konten static ke Gitlab
```
pages:
stage: deploy
script:
- mkdir .public
- cp -r * .public
- mv .public public
artifacts:
paths:
- public
only:
- master
```
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment