Artikel ini bermula dari pengalaman saya saat mencoba melakukan build menggunakan Bitbucket Pipelines dengan self-hosted runner yang dijalankan dalam sebuah container. Setiap kali proses build dijalankan, selalu muncul pesan kesalahan “cannot allocate memory.” Pada awalnya, saya mengira masalahnya terkait dengan sumber daya server untuk runner yang tidak mencukupi, meskipun memori yang tersedia sudah 8GB. Setelah berhasil mengatasi masalah ini, saya memutuskan untuk menulis artikel ini sebagai dokumentasi.

Mengenal Runner pada Bitbucket Pipelines

Dalam konteks Bitbucket Pipelines, runner adalah agen eksekusi yang menjalankan pipeline atau rangkaian tugas otomatisasi untuk proyek Anda. Bitbucket menyediakan dua jenis runner utama:

  • Cloud Runner: Disediakan dan dikelola oleh Bitbucket di infrastruktur cloud mereka. Cloud runner memiliki keterbatasan sumber daya, tetapi pengguna tidak perlu mengelola konfigurasi server.
  • Self-Hosted Runner: Dijalankan di server milik Anda sendiri, memberikan fleksibilitas dan kontrol penuh. Self-hosted runner memungkinkan pengguna mengatur spesifikasi perangkat keras, konfigurasi jaringan, hingga batasan memori sesuai kebutuhan proyek.

Menyesuaikan Ukuran dan Alokasi Memori pada Self-Hosted Runner

Bitbucket Pipelines memungkinkan penyesuaian alokasi memori melalui opsi size, yang bisa ditentukan dari 1x hingga 8x untuk runner self-hosted. Setiap tingkat ukuran menambah jumlah memori hingga maksimal 32GB pada ukuran 8x. Alokasi ini mencakup total memori yang tersedia untuk langkah pipeline beserta layanan yang terlibat di dalamnya, seperti Docker. Ini bisa dilihat pada dokumentasi mereka di sini.

Dalam self-hosted runner, layanan Docker secara default mendapatkan memori 1024MB. Jika pipeline membutuhkan proses Docker yang lebih berat, seperti docker build atau docker push untuk image besar, Anda dapat menyesuaikan alokasi memori layanan Docker agar operasi build berjalan lebih lancar. Pengaturan ini dapat diatur dengan mengatur memory pada berkasi bitbucket-pipelines.yml seperti pada baris nomor 7 di bawah ini.

YAML
image: atlassian/default-image:2

definitions:
  services:
    docker:
      image: docker:dind
      memory: 6000

  steps:
    - step: &build-image
        name: Build Image
        size: 2x
        runs-on:
          - self.hosted
          - linux
        services:
          - docker
        script:
          - docker info

Walau kita sudah mempebesar memory yang akan digunakan untuk mengeksekusi sebesar 6000MB, namun ada aturan default yang menentukan bahwa pada setiap step ukuran Memory yang dapat digunakan adalah sebesar 4096MB atau 4GB. Untuk itu pada baris ke 12 saya menambahkan Size: 2x, agar Runner dapat membuat limit sebesar 8192 MB atau 2X lebih besar dari limit bawaan.

Perlu diperhatikan juga bahwa pada konfigurasi Memory pada Runner harus disisakan 1GB untuk Runner tersebut bisa berjalan. Misal Size 2X yang memiliki limit RAM 8GB, berarti maksimal memory yang bisa didefinisikan untuk container adalah 7GB.

Referensi: Bitbucket Pipeline keeps on showing not enough memory | Atlassian Community

https://community.atlassian.com/t5/Bitbucket-questions/Bitbucket-Pipeline-keeps-on-showing-not-enough-memory/qaq-p/2299076

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *