Fix BuildKit network for internal Nexus registry
CI/CD Pipeline to Rancher - SIDATA / build-and-deploy (push) Failing after 22s

This commit is contained in:
2026-09-07 13:28:55 +07:00
parent 97192cf923
commit c8be35b1de
+117 -62
View File
@@ -18,35 +18,23 @@ jobs:
http_proxy: http://10.15.3.20:80
https_proxy: http://10.15.3.20:80
# Registry dan repository internal bypass proxy
NO_PROXY: >-
localhost,
127.0.0.1,
10.81.2.10,
10.15.39.186,
registry-nexus-bpkd.drc-bpkd.data-center.id,
registry-bpkd.drc-bpkd.data-center.id,
.bpkd.jakarta.go.id
# ============================================================
# Internal Network - Bypass Proxy
# ============================================================
NO_PROXY: "localhost,127.0.0.1,10.81.2.10,10.15.39.186,registry-nexus-bpkd.drc-bpkd.data-center.id,registry-bpkd.drc-bpkd.data-center.id,.drc-bpkd.data-center.id,.bpkd.jakarta.go.id"
no_proxy: >-
localhost,
127.0.0.1,
10.81.2.10,
10.15.39.186,
registry-nexus-bpkd.drc-bpkd.data-center.id,
registry-bpkd.drc-bpkd.data-center.id,
.bpkd.jakarta.go.id
no_proxy: "localhost,127.0.0.1,10.81.2.10,10.15.39.186,registry-nexus-bpkd.drc-bpkd.data-center.id,registry-bpkd.drc-bpkd.data-center.id,.drc-bpkd.data-center.id,.bpkd.jakarta.go.id"
steps:
# ============================================================
# Checkout
# 1. Checkout
# ============================================================
- name: Checkout Code
uses: actions/checkout@v3
# ============================================================
# Diagnostic - Network & Proxy
# 2. Diagnostic
# ============================================================
- name: Test Registry Connectivity
shell: bash
@@ -54,23 +42,46 @@ jobs:
set -e
echo "=========================================="
echo " Proxy Environment"
echo "SYSTEM"
echo "=========================================="
hostname
uname -a
echo ""
echo "=========================================="
echo "PROXY"
echo "=========================================="
env | grep -i proxy || true
echo ""
echo "=========================================="
echo " DNS Resolution"
echo "DNS"
echo "=========================================="
getent hosts registry-nexus-bpkd.drc-bpkd.data-center.id
getent hosts registry-bpkd.drc-bpkd.data-center.id
echo "Nexus:"
getent hosts registry-nexus-bpkd.drc-bpkd.data-center.id || true
echo "BPKD Registry:"
getent hosts registry-bpkd.drc-bpkd.data-center.id || true
echo ""
echo "=========================================="
echo " Test Nexus Registry"
echo "HOSTS"
echo "=========================================="
cat /etc/hosts
echo ""
echo "=========================================="
echo "NEXUS /v2/"
echo "=========================================="
HTTPS_PROXY= \
HTTP_PROXY= \
https_proxy= \
http_proxy= \
curl -vk \
--connect-timeout 10 \
https://registry-nexus-bpkd.drc-bpkd.data-center.id/v2/ \
@@ -78,7 +89,7 @@ jobs:
echo ""
echo "=========================================="
echo " Test BPKD Registry"
echo "BPKD REGISTRY /v2/"
echo "=========================================="
curl -vk \
@@ -87,7 +98,7 @@ jobs:
|| true
# ============================================================
# Login Registry
# 3. Login Registry
# ============================================================
- name: Log in to Gitea Container Registry
uses: docker/login-action@v2
@@ -97,58 +108,86 @@ jobs:
password: ${{ secrets.REGISTRY_PASSWORD }}
# ============================================================
# Build & Push
# 4. Setup Buildx
#
# PENTING:
# network=host diletakkan DI SINI.
# Jangan diletakkan di build-push-action.
# ============================================================
- name: Prepare Base Image
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver: docker-container
driver-opts: |
network=host
# ============================================================
# 5. Diagnostic BuildKit
# ============================================================
- name: Check BuildKit
shell: bash
run: |
set -e
BASE_IMAGE="registry-nexus-bpkd.drc-bpkd.data-center.id/php74-fpm-oci8-lengkap:1.0"
echo "=========================================="
echo "Docker Version"
echo "=========================================="
echo "Checking local base image..."
docker version
if podman image exists "$BASE_IMAGE"; then
echo "Base image already exists locally."
else
echo "Base image not found. Pulling from Nexus..."
echo ""
echo "=========================================="
echo "Buildx Version"
echo "=========================================="
HTTPS_PROXY= \
HTTP_PROXY= \
https_proxy= \
http_proxy= \
NO_PROXY="registry-nexus-bpkd.drc-bpkd.data-center.id,10.81.2.10" \
no_proxy="registry-nexus-bpkd.drc-bpkd.data-center.id,10.81.2.10" \
podman pull "$BASE_IMAGE"
fi
docker buildx version
echo "Creating local build tag..."
echo ""
echo "=========================================="
echo "Buildx Inspect"
echo "=========================================="
podman tag \
"$BASE_IMAGE" \
php74-fpm-oci8-lengkap:1.0
docker buildx inspect --bootstrap
echo "Base image ready:"
podman image inspect php74-fpm-oci8-lengkap:1.0 \
--format '{{.Id}}'
echo ""
echo "=========================================="
echo "DNS From Build Environment"
echo "=========================================="
getent hosts registry-nexus-bpkd.drc-bpkd.data-center.id || true
# ============================================================
# 6. Build & Push
# ============================================================
- name: Build and Push Docker Image
uses: docker/build-push-action@v6
with:
context: .
push: true
# Proxy hanya diberikan kepada proses build.
# NO_PROXY memastikan registry internal tidak lewat proxy.
# ========================================================
# Build arguments
# ========================================================
build-args: |
http_proxy=${{ env.http_proxy }}
https_proxy=${{ env.https_proxy }}
no_proxy=${{ env.no_proxy }}
# ========================================================
# Image Tags
# ========================================================
tags: |
registry-bpkd.drc-bpkd.data-center.id/${{ secrets.REGISTRY_USER }}/sidata:latest
registry-bpkd.drc-bpkd.data-center.id/${{ secrets.REGISTRY_USER }}/sidata:${{ gitea.sha }}
# ========================================================
# Build Cache
# ========================================================
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
# ============================================================
# Deploy ke Rancher
# 7. Deploy ke Rancher
# ============================================================
- name: Deploy to Rancher Cluster
shell: bash
@@ -156,7 +195,7 @@ jobs:
set -e
echo "=========================================="
echo " Download kubectl"
echo "Download kubectl"
echo "=========================================="
KUBECTL_VERSION=$(curl -L -s https://dl.k8s.io/release/stable.txt)
@@ -169,12 +208,15 @@ jobs:
chmod +x kubectl
echo ""
echo "kubectl client version:"
echo "=========================================="
echo "kubectl Client"
echo "=========================================="
./kubectl version --client
echo ""
echo "=========================================="
echo " Configure Rancher Kubeconfig"
echo "Configure Rancher"
echo "=========================================="
./kubectl config set-cluster rancher-cluster \
@@ -192,30 +234,43 @@ jobs:
echo ""
echo "=========================================="
echo " Test Rancher Connection"
echo "Test Rancher Connection"
echo "=========================================="
./kubectl cluster-info
echo ""
echo "=========================================="
echo " Kubernetes Nodes"
echo "Kubernetes Nodes"
echo "=========================================="
./kubectl get nodes
echo ""
echo "=========================================="
echo " Deploy"
echo "Deploy Application"
echo "=========================================="
# Sesuaikan file manifest dengan repository Anda.
# Jika file deployment.yaml berada di folder k8s:
./kubectl apply -f k8s/
if [ -d "k8s" ]; then
echo "Applying manifests from k8s/"
./kubectl apply -f k8s/
elif [ -f "deploy.yaml" ]; then
echo "Applying deploy.yaml"
./kubectl apply -f deploy.yaml
elif [ -f "deployment.yaml" ]; then
echo "Applying deployment.yaml"
./kubectl apply -f deployment.yaml
else
echo "ERROR: Kubernetes manifest tidak ditemukan."
exit 1
fi
echo ""
echo "=========================================="
echo " Deployment Status"
echo "Deployment Status"
echo "=========================================="
./kubectl get deployments -A