Kembali ke blog

Integrasi Proxy dalam Pipeline CI/CD: Pengaturan untuk GitHub Actions, GitLab, dan Jenkins

Panduan lengkap untuk mengintegrasikan proxy ke dalam pipeline CI/CD untuk pengembang: pengaturan GitHub Actions, GitLab CI, Jenkins dengan contoh kode dan solusi untuk masalah umum.

📅17 Februari 2026
```html

Dalam otomatisasi penyebaran dan pengujian, sering kali diperlukan untuk menggunakan server proxy dalam proses CI/CD. Ini bisa terkait dengan kebijakan keamanan perusahaan, pengujian fitur geolokasi, atau menghindari pembatasan laju saat mengunduh ketergantungan. Dalam panduan ini, kita akan membahas pengaturan praktis proxy untuk platform CI/CD populer dengan contoh konfigurasi yang siap pakai.

Mengapa Proxy Diperlukan dalam Proses CI/CD

Penggunaan server proxy dalam proses penyebaran otomatis menyelesaikan beberapa tugas kritis. Pertama, banyak jaringan perusahaan mengharuskan semua lalu lintas keluar melewati proxy perusahaan untuk kontrol keamanan dan pencatatan. Tanpa pengaturan yang benar, pipeline CI/CD tidak akan dapat mengunduh ketergantungan atau terhubung ke layanan eksternal.

Kedua, saat menguji aplikasi dengan logika geolokasi, perlu untuk memeriksa kinerja dari berbagai negara. Misalnya, jika Anda mengembangkan layanan dengan konten atau penetapan harga regional, pengujian otomatis harus mensimulasikan pengguna dari lokasi yang berbeda. Di sini, proxy residensial dengan alamat IP dari wilayah yang diperlukan sangat membantu.

Alasan ketiga adalah untuk menghindari pembatasan laju dan pemblokiran. Dengan seringnya menjalankan pipeline, terutama dalam tim besar, server CI/CD dapat terkena batasan API dari layanan eksternal. Misalnya, API GitHub atau repositori paket dapat sementara memblokir IP jika melebihi batas permintaan. Rotasi proxy membantu mendistribusikan beban.

Penting: Untuk proses CI/CD, stabilitas koneksi sangat penting. Gunakan proxy dengan uptime tidak kurang dari 99.5% dan respon cepat (kurang dari 200ms). Proxy yang tidak stabil akan menyebabkan kegagalan acak dalam build dan membuang waktu tim untuk penyelidikan.

Pengaturan Proxy di GitHub Actions

GitHub Actions adalah salah satu platform paling populer untuk CI/CD. Pengaturan proxy di sini dilakukan melalui variabel lingkungan, yang dapat ditetapkan pada tingkat workflow atau seluruh organisasi. Mari kita lihat beberapa cara untuk integrasi.

Pengaturan Dasar melalui Variabel Lingkungan

Cara paling sederhana adalah dengan menetapkan variabel lingkungan HTTP_PROXY dan HTTPS_PROXY di awal job. Sebagian besar alat (curl, wget, npm, pip) secara otomatis menggunakan variabel ini:

name: CI dengan Proxy

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    
    env:
      HTTP_PROXY: http://proxy.example.com:8080
      HTTPS_PROXY: http://proxy.example.com:8080
      NO_PROXY: localhost,127.0.0.1,.internal.domain
    
    steps:
      - uses: actions/checkout@v3
      
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      
      - name: Install dependencies
        run: npm install
      
      - name: Run tests
        run: npm test

Variabel NO_PROXY sangat penting — ia mengecualikan alamat lokal dan layanan internal dari pemrosesan proxy. Tanpa itu, mungkin akan ada masalah saat terhubung ke localhost atau kontainer Docker internal.

Penyimpanan Aman Kredensial melalui GitHub Secrets

Jika proxy memerlukan autentikasi, jangan pernah menyimpan nama pengguna dan kata sandi dalam bentuk terbuka di file workflow. Gunakan GitHub Secrets:

name: CI dengan Proxy Terautentikasi

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v3
      
      - name: Konfigurasi Proxy
        run: |
          echo "HTTP_PROXY=http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}" >> $GITHUB_ENV
          echo "HTTPS_PROXY=http://${{ secrets.PROXY_USER }}:${{ secrets.PROXY_PASS }}@${{ secrets.PROXY_HOST }}:${{ secrets.PROXY_PORT }}" >> $GITHUB_ENV
          echo "NO_PROXY=localhost,127.0.0.1" >> $GITHUB_ENV
      
      - name: Uji koneksi proxy
        run: curl -I https://api.github.com
      
      - name: Install dependencies
        run: npm ci

Buat secrets di pengaturan repositori: Settings → Secrets and variables → Actions → New repository secret. Tambahkan PROXY_USER, PROXY_PASS, PROXY_HOST, dan PROXY_PORT. Nilai-nilai ini akan dienkripsi dan tidak tersedia di log.

Pengaturan Proxy untuk Langkah Tertentu

Terkadang perlu menggunakan proxy hanya untuk operasi tertentu, misalnya, hanya untuk mengunduh ketergantungan, tetapi tidak untuk penyebaran. Tetapkan variabel pada tingkat langkah tertentu:

steps:
  - name: Unduh ketergantungan melalui proxy
    env:
      HTTP_PROXY: http://proxy.example.com:8080
      HTTPS_PROXY: http://proxy.example.com:8080
    run: npm install
  
  - name: Deploy tanpa proxy
    run: ./deploy.sh

Integrasi Proxy dengan GitLab CI/CD

GitLab CI/CD menyediakan beberapa tingkat pengaturan proxy: pada tingkat runner, pada tingkat proyek, dan pada tingkat job tertentu. Pilihan tergantung pada apakah proxy diperlukan untuk semua proyek atau hanya untuk tertentu.

Pengaturan Proxy pada Tingkat GitLab Runner

Jika Anda menggunakan GitLab Runner yang di-host sendiri dan semua proyek harus berjalan melalui proxy, atur di konfigurasi runner. Edit file /etc/gitlab-runner/config.toml:

[[runners]]
  name = "docker-runner"
  url = "https://gitlab.com/"
  token = "YOUR_TOKEN"
  executor = "docker"
  
  [runners.docker]
    image = "alpine:latest"
    privileged = false
    
  [runners.docker.services_environment]
    HTTP_PROXY = "http://proxy.example.com:8080"
    HTTPS_PROXY = "http://proxy.example.com:8080"
    NO_PROXY = "localhost,127.0.0.1,.gitlab.com"

Setelah mengubah konfigurasi, restart runner: sudo gitlab-runner restart. Sekarang semua job di runner ini akan secara otomatis menggunakan proxy.

Pengaturan melalui .gitlab-ci.yml

Untuk mengatur proxy pada tingkat proyek tertentu, gunakan variabel dalam file .gitlab-ci.yml. Ini adalah pendekatan yang lebih fleksibel, memungkinkan proyek yang berbeda menggunakan proxy yang berbeda:

variables:
  HTTP_PROXY: "http://proxy.example.com:8080"
  HTTPS_PROXY: "http://proxy.example.com:8080"
  NO_PROXY: "localhost,127.0.0.1,.internal"

stages:
  - build
  - test
  - deploy

build:
  stage: build
  script:
    - echo "Proxy dikonfigurasi: $HTTP_PROXY"
    - npm install
    - npm run build
  artifacts:
    paths:
      - dist/

test:
  stage: test
  script:
    - npm test
  dependencies:
    - build

Menggunakan Variabel GitLab CI/CD untuk Kredensial

Untuk menyimpan data sensitif, gunakan Variabel CI/CD di pengaturan proyek: Settings → CI/CD → Variables. Buat variabel yang dilindungi dan disembunyikan:

  • PROXY_URL — URL lengkap dengan kredensial (disembunyikan)
  • PROXY_HOST — host server proxy
  • PROXY_PORT — port
  • PROXY_USER dan PROXY_PASS — untuk penyimpanan terpisah

Kemudian gunakan mereka di .gitlab-ci.yml:

build:
  stage: build
  before_script:
    - export HTTP_PROXY="http://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}"
    - export HTTPS_PROXY="http://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}"
  script:
    - npm install
    - npm run build

Konfigurasi Proxy di Jenkins

Jenkins menawarkan beberapa cara untuk mengatur proxy tergantung pada arsitektur: pengaturan global untuk Jenkins master, pengaturan untuk agen tertentu, atau pengaturan pada tingkat pipeline individu.

Pengaturan Global Proxy untuk Jenkins

Untuk mengatur proxy yang akan digunakan Jenkins untuk pembaruan plugin dan operasi internal lainnya, pergi ke Manage Jenkins → Manage Plugins → Advanced. Di bagian Konfigurasi Proxy HTTP, masukkan:

  • Server: proxy.example.com
  • Port: 8080
  • Nama pengguna dan Kata Sandi (jika memerlukan autentikasi)
  • No Proxy Host: localhost,127.0.0.1,.internal

Pengaturan ini hanya mempengaruhi Jenkins itu sendiri, tetapi tidak pada job. Untuk job, diperlukan konfigurasi terpisah.

Pengaturan Proxy untuk Jenkins Pipeline

Dalam Jenkinsfile, Anda dapat menetapkan variabel lingkungan untuk seluruh pipeline atau untuk stage tertentu:

pipeline {
    agent any
    
    environment {
        HTTP_PROXY = 'http://proxy.example.com:8080'
        HTTPS_PROXY = 'http://proxy.example.com:8080'
        NO_PROXY = 'localhost,127.0.0.1,.internal'
    }
    
    stages {
        stage('Build') {
            steps {
                sh 'npm install'
                sh 'npm run build'
            }
        }
        
        stage('Test') {
            steps {
                sh 'npm test'
            }
        }
    }
}

Menggunakan Jenkins Credentials untuk Proxy

Untuk penyimpanan aman kredensial proxy, gunakan Jenkins Credentials Store. Buat kredensial tipe "Username with password" di Manage Jenkins → Manage Credentials, lalu gunakan dalam pipeline:

pipeline {
    agent any
    
    stages {
        stage('Build dengan Proxy Terautentikasi') {
            steps {
                withCredentials([usernamePassword(
                    credentialsId: 'proxy-credentials',
                    usernameVariable: 'PROXY_USER',
                    passwordVariable: 'PROXY_PASS'
                )]) {
                    sh '''
                        export HTTP_PROXY="http://${PROXY_USER}:${PROXY_PASS}@proxy.example.com:8080"
                        export HTTPS_PROXY="http://${PROXY_USER}:${PROXY_PASS}@proxy.example.com:8080"
                        npm install
                    '''
                }
            }
        }
    }
}

Pengaturan Proxy untuk Agen Jenkins

Jika Anda menggunakan agen Jenkins terpisah (nodes), atur proxy untuk setiap agen secara terpisah. Dalam konfigurasi agen (Manage Jenkins → Manage Nodes → Configure), tambahkan di variabel Lingkungan:

HTTP_PROXY=http://proxy.example.com:8080
HTTPS_PROXY=http://proxy.example.com:8080
NO_PROXY=localhost,127.0.0.1

Proxy untuk Docker dalam CI/CD

Docker adalah bagian integral dari proses CI/CD modern. Pengaturan proxy untuk Docker memiliki keunikan tersendiri, karena perlu mengatur proxy untuk daemon Docker dan untuk kontainer.

Pengaturan Proxy untuk Daemon Docker

Agar daemon Docker dapat mengunduh gambar melalui proxy, buat file drop-in systemd. Di sistem Linux, buat direktori dan file:

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

Tambahkan konten berikut:

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:8080"
Environment="HTTPS_PROXY=http://proxy.example.com:8080"
Environment="NO_PROXY=localhost,127.0.0.1,.internal,docker.io"

Restart konfigurasi dan Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl show --property=Environment docker

Proxy untuk Kontainer Selama Build

Jika kontainer memerlukan akses melalui proxy selama build (misalnya, untuk menginstal paket), kirimkan variabel melalui build args di Dockerfile:

FROM node:18-alpine

ARG HTTP_PROXY
ARG HTTPS_PROXY
ARG NO_PROXY

ENV HTTP_PROXY=${HTTP_PROXY}
ENV HTTPS_PROXY=${HTTPS_PROXY}
ENV NO_PROXY=${NO_PROXY}

WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .

# Hapus variabel proxy untuk runtime
ENV HTTP_PROXY=
ENV HTTPS_PROXY=

CMD ["npm", "start"]

Dalam pipeline CI/CD, kirimkan build args:

# GitHub Actions
- name: Build Docker image with proxy
  run: |
    docker build \
      --build-arg HTTP_PROXY=${{ secrets.PROXY_URL }} \
      --build-arg HTTPS_PROXY=${{ secrets.PROXY_URL }} \
      --build-arg NO_PROXY=localhost,127.0.0.1 \
      -t myapp:latest .

# GitLab CI
docker build:
  script:
    - docker build 
        --build-arg HTTP_PROXY="${PROXY_URL}"
        --build-arg HTTPS_PROXY="${PROXY_URL}"
        -t myapp:latest .

Docker Compose dengan Proxy

Saat menggunakan Docker Compose dalam CI/CD, atur proxy melalui environment di docker-compose.yml:

version: '3.8'

services:
  app:
    build:
      context: .
      args:
        - HTTP_PROXY=${HTTP_PROXY}
        - HTTPS_PROXY=${HTTPS_PROXY}
    environment:
      - HTTP_PROXY=${HTTP_PROXY}
      - HTTPS_PROXY=${HTTPS_PROXY}
      - NO_PROXY=localhost,127.0.0.1
    ports:
      - "3000:3000"

Pengaturan Proxy untuk Manajer Paket

Manajer paket sering memerlukan pengaturan tambahan untuk proxy, terutama jika menggunakan file konfigurasi mereka sendiri. Mari kita lihat pengaturan untuk manajer paket populer.

NPM dan Yarn

NPM dapat menggunakan variabel lingkungan HTTP_PROXY/HTTPS_PROXY, serta konfigurasi mereka sendiri. Untuk pengaturan eksplisit dalam CI/CD:

# Di GitHub Actions atau GitLab CI
- name: Konfigurasi proxy npm
  run: |
    npm config set proxy http://proxy.example.com:8080
    npm config set https-proxy http://proxy.example.com:8080
    npm config set noproxy "localhost,127.0.0.1"

- name: Install dependencies
  run: npm install

# Untuk Yarn
- name: Konfigurasi proxy yarn
  run: |
    yarn config set proxy http://proxy.example.com:8080
    yarn config set https-proxy http://proxy.example.com:8080

Cara alternatif adalah dengan membuat file .npmrc di root proyek (tetapi jangan commit kredensial!):

# .npmrc (dihasilkan dalam CI)
proxy=http://proxy.example.com:8080
https-proxy=http://proxy.example.com:8080
noproxy=localhost,127.0.0.1

Python pip dan Poetry

Pip menggunakan variabel lingkungan, tetapi juga dapat diatur melalui konfigurasi:

# Melalui variabel lingkungan (direkomendasikan untuk CI)
export HTTP_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080
pip install -r requirements.txt

# Atau melalui parameter pip
pip install --proxy http://proxy.example.com:8080 -r requirements.txt

# Untuk Poetry
poetry config http-basic.proxy http://proxy.example.com:8080
poetry install

Maven dan Gradle

Untuk proyek Java, pengaturan proxy memerlukan pembuatan file konfigurasi. Untuk Maven, buat settings.xml dalam pipeline CI:

- name: Konfigurasi proxy Maven
  run: |
    mkdir -p ~/.m2
    cat > ~/.m2/settings.xml << EOF
    <settings>
      <proxies>
        <proxy>
          <id>http-proxy</id>
          <active>true</active>
          <protocol>http</protocol>
          <host>proxy.example.com</host>
          <port>8080</port>
          <nonProxyHosts>localhost|127.0.0.1</nonProxyHosts>
        </proxy>
      </proxies>
    </settings>
    EOF

- name: Build dengan Maven
  run: mvn clean install

Untuk Gradle, tambahkan pengaturan di gradle.properties:

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.http.nonProxyHosts=localhost|127.0.0.1

Penyimpanan Aman Kredensial Proxy

Penyimpanan kredensial proxy adalah aspek kritis dari keamanan CI/CD. Kebocoran data ini dapat menyebabkan penggunaan proxy yang tidak sah dan kerugian finansial. Mari kita lihat praktik terbaik untuk berbagai platform.

GitHub Actions Secrets

GitHub Actions menawarkan tiga tingkat rahasia: repository, environment, dan organization. Untuk kredensial proxy, gunakan:

  • Repository secrets — untuk proyek di mana proxy hanya diperlukan di satu repositori
  • Organization secrets — jika satu proxy digunakan di semua proyek organisasi
  • Environment secrets — untuk proxy yang berbeda di lingkungan staging/production

Aturan keamanan penting:

  • Jangan pernah mencetak rahasia di log: GitHub secara otomatis menyembunyikannya, tetapi lebih baik menghindari echo
  • Gunakan kredensial yang berbeda untuk lingkungan yang berbeda
  • Secara teratur rotasi kata sandi proxy (setidaknya setiap 90 hari)
  • Batasi akses ke rahasia melalui aturan perlindungan cabang

GitLab CI/CD Variables

GitLab menawarkan opsi perlindungan tambahan untuk variabel:

  • Protected — variabel hanya tersedia di cabang yang dilindungi (main, production)
  • Masked — nilai secara otomatis disembunyikan di log
  • Environment scope — pembatasan penggunaan pada lingkungan tertentu

Konfigurasi yang disarankan untuk kredensial proxy:

# Settings → CI/CD → Variables
PROXY_USER: myuser (Protected: Yes, Masked: Yes)
PROXY_PASS: secret123 (Protected: Yes, Masked: Yes)
PROXY_HOST: proxy.example.com (Protected: No, Masked: No)
PROXY_PORT: 8080 (Protected: No, Masked: No)

Jenkins Credentials Store

Jenkins Credentials Store mendukung beberapa jenis penyimpanan kredensial. Untuk proxy, disarankan:

  • Gunakan "Username with password" untuk nama pengguna/kata sandi proxy
  • Atur kredensial tingkat Folder untuk tim/proyek yang berbeda
  • Aktifkan Credentials Binding Plugin untuk penggunaan aman dalam Pipeline
  • Atur audit logging untuk melacak penggunaan kredensial

Sistem Manajemen Rahasia Eksternal

Untuk lingkungan perusahaan, disarankan untuk menggunakan sistem manajemen rahasia khusus: HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, atau Google Secret Manager. Contoh integrasi dengan HashiCorp Vault dalam GitHub Actions:

- name: Impor Rahasia dari Vault
  uses: hashicorp/vault-action@v2
  with:
    url: https://vault.example.com
    token: ${{ secrets.VAULT_TOKEN }}
    secrets: |
      secret/data/proxy proxy_user | PROXY_USER ;
      secret/data/proxy proxy_pass | PROXY_PASS ;
      secret/data/proxy proxy_host | PROXY_HOST

- name: Konfigurasi Proxy
  run: |
    export HTTP_PROXY="http://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:8080"
    npm install

Solusi Masalah Umum

Saat mengintegrasikan proxy dalam CI/CD, sering kali muncul masalah yang sama. Mari kita lihat masalah yang paling umum dan cara mengatasinya.

Masalah: Timeout Koneksi saat Mengunduh Ketergantungan

Gejala: npm install, pip install, atau docker pull gagal dengan kesalahan timeout setelah 30-60 detik.

Penyebab:

  • Server proxy tidak tersedia atau kelebihan beban
  • Format URL proxy salah (lupa http:// di awal)
  • Proxy memerlukan autentikasi, tetapi kredensial tidak diberikan
  • Firewall memblokir koneksi dari runner CI/CD ke proxy

Solusi:

# 1. Periksa ketersediaan proxy
- name: Uji konektivitas proxy
  run: |
    curl -v -x http://proxy.example.com:8080 https://www.google.com
    echo "Uji proxy selesai"

# 2. Tingkatkan timeout untuk npm
- name: Install dengan timeout yang ditingkatkan
  run: |
    npm config set fetch-timeout 300000
    npm install

# 3. Periksa format URL
- name: Debug konfigurasi proxy
  run: |
    echo "HTTP_PROXY: $HTTP_PROXY"
    echo "HTTPS_PROXY: $HTTPS_PROXY"
    # Harusnya: http://user:pass@host:port

Masalah: Verifikasi Sertifikat SSL Gagal

Gejala: Kesalahan seperti "Masalah sertifikat SSL: tidak dapat mendapatkan sertifikat penerbit lokal" atau "CERT_UNTRUSTED".

Penyebab: Proxy perusahaan sering melakukan inspeksi SSL, mengganti sertifikat. Runner CI/CD tidak mempercayai CA perusahaan.

Solusi:

# Opsi 1: Tambahkan sertifikat CA perusahaan
- name: Instal sertifikat CA perusahaan
  run: |
    sudo cp corporate-ca.crt /usr/local/share/ca-certificates/
    sudo update-ca-certificates

# Opsi 2: Nonaktifkan verifikasi SSL (TIDAK disarankan untuk produksi!)
- name: Instal dengan verifikasi SSL dinonaktifkan
  run: |
    npm config set strict-ssl false
    npm install
  env:
    NODE_TLS_REJECT_UNAUTHORIZED: 0

# Opsi 3: Gunakan proxy hanya untuk HTTP, HTTPS langsung
- name: Penggunaan proxy selektif
  run: npm install
  env:
    HTTP_PROXY: http://proxy.example.com:8080
    # HTTPS_PROXY tidak diatur

Peringatan: Menonaktifkan verifikasi sertifikat SSL menciptakan risiko keamanan yang serius. Gunakan pendekatan ini hanya untuk jaringan perusahaan internal dan pastikan untuk menambahkan CA perusahaan ke dalam daftar yang dipercaya.

Masalah: Proxy Berfungsi untuk Beberapa Perintah, tetapi Tidak untuk yang Lain

Gejala: npm install berfungsi melalui proxy, tetapi git clone atau docker pull mengabaikan pengaturan proxy.

Penyebab: Alat yang berbeda menggunakan mekanisme pengaturan proxy yang berbeda. Git dan Docker memiliki file konfigurasi mereka sendiri.

Solusi:

# Pengaturan proxy Git
- name: Konfigurasi proxy Git
  run: |
    git config --global http.proxy http://proxy.example.com:8080
    git config --global https.proxy http://proxy.example.com:8080

# Pengaturan proxy Docker (lihat bagian Docker di atas)
# Untuk wget/curl
- name: Konfigurasi wget/curl
  run: |
    echo "use_proxy = on" >> ~/.wgetrc
    echo "http_proxy = http://proxy.example.com:8080" >> ~/.wgetrc
    echo "https_proxy = http://proxy.example.com:8080" >> ~/.wgetrc

Masalah: Layanan Internal Tidak Tersedia Saat Proxy Diaktifkan

Gejala: Setelah mengatur proxy, koneksi ke localhost, kontainer Docker internal, atau layanan perusahaan berhenti berfungsi.

Penyebab: Variabel NO_PROXY tidak diatur dengan benar, semua permintaan melewati proxy, termasuk lokal.

Solusi:

# Pengaturan NO_PROXY yang benar
env:
  HTTP_PROXY: http://proxy.example.com:8080
  HTTPS_PROXY: http://proxy.example.com:8080
  NO_PROXY: |
    localhost,
    127.0.0.1,
    0.0.0.0,
    .internal,
    .local,
    .corp.example.com,
    docker.internal,
    host.docker.internal

# Untuk Docker Compose, juga tambahkan
services:
  app:
    environment:
      - NO_PROXY=localhost,127.0.0.1,db,redis
      # db dan redis — nama layanan lain dalam compose

Masalah: Kredensial Proxy Muncul di Log

Gejala: Kata sandi proxy terlihat di log CI/CD dalam bentuk terbuka.

Penyebab: Mencetak variabel lingkungan melalui echo atau mode verbose dari perintah.

Solusi:

# ❌ BURUK - kredensial di log
- name: Debug proxy
  run: |
    echo "Proxy: $HTTP_PROXY"  # Menunjukkan http://user:pass@host:port
    curl -v ...  # Mode verbose menunjukkan kredensial

# ✅ BAIK - output aman
- name: Debug proxy (aman)
  run: |
    echo "Host proxy dikonfigurasi: $(echo $HTTP_PROXY | cut -d'@' -f2)"
    # Hanya menunjukkan host:port
    
# Gunakan secrets untuk menyembunyikan
- name: Konfigurasi proxy
  env:
    PROXY_URL: ${{ secrets.PROXY_URL }}  # GitHub secara otomatis menyembunyikan
  run: |
    export HTTP_PROXY="$PROXY_URL"

Kesimpulan

Integrasi proxy dalam pipeline CI/CD adalah aspek penting dari otomatisasi yang memastikan keamanan, kepatuhan terhadap kebijakan perusahaan, dan kemampuan untuk menguji fitur geolokasi. Dalam panduan ini, kita telah membahas cara praktis untuk mengatur proxy untuk GitHub Actions, GitLab CI, Jenkins, Docker, dan manajer paket populer.

Poin kunci yang perlu diingat saat mengatur proxy dalam CI/CD: selalu gunakan penyimpanan aman untuk kredensial melalui mekanisme rahasia bawaan platform, atur NO_PROXY dengan benar untuk mengecualikan layanan lokal dan internal, uji koneksi ke proxy sebelum operasi utama, dan pantau log untuk kebocoran data sensitif. Untuk lingkungan produksi yang kritis, disarankan untuk menggunakan sistem manajemen rahasia eksternal seperti HashiCorp Vault.

Pemilihan jenis proxy tergantung pada tugas Anda: untuk jaringan perusahaan biasanya digunakan proxy HTTP/HTTPS yang ada, untuk pengujian fitur geolokasi cocok menggunakan proxy residensial dengan IP dari negara yang diperlukan, dan untuk pengunduhan ketergantungan yang cepat dapat menggunakan proxy data center. Penting untuk memastikan uptime tinggi dari server proxy, karena ketidaktersediaannya akan menyebabkan kegagalan semua build dan memblokir pekerjaan tim pengembangan.

Saat menghadapi masalah, mulai dengan memeriksa ketersediaan dasar proxy melalui curl atau wget, kemudian periksa format URL dan kredensial yang benar, dan hanya setelah itu beralih ke pengaturan spesifik dari alat tertentu. Sebagian besar masalah dapat diselesaikan dengan pengaturan yang benar dari variabel lingkungan HTTP_PROXY, HTTPS_PROXY, dan NO_PROXY.

```