Dokumen ini menjelaskan cara menginstal dan mendaftarkan GitLab Runners pada kluster Kubernetes serta menambahkan executor Kubernetes untuk membangun aplikasi. Dokumen ini juga menyediakan contoh langkah demi langkah untuk mengimplementasikan pipeline integrasi berkelanjutan (CI)/pengiriman berkelanjutan (CD) yang mencakup tahapan seperti kompilasi kode sumber, pembuatan dan pengunggahan image, serta penyebaran aplikasi.
Informasi latar belakang
Contoh berikut menunjukkan bagaimana proyek Java dibangun dan diterapkan pada kluster Container Service for Kubernetes (ACK). Contoh ini mendemonstrasikan penggunaan GitLab CI untuk menjalankan GitLab Runner, menetapkan executor Kubernetes, dan menjalankan pipeline CI/CD.
Buat proyek GitLab dan unggah kode contoh
- Buat proyek GitLab. Alamat proyek GitLab dalam contoh ini adalah:
http://xx.xx.xx.xx/demo/gitlab-java-demo.git - Jalankan perintah berikut untuk membuat salinan kode contoh dan mengunggahnya ke GitLab:
git clone https://github.com/haoshuwei/gitlab-ci-k8s-demo.git git remote add gitlab http://xx.xx.xx.xx/demo/gitlab-java-demo.git git push gitlab master
Instal GitLab Runner di kluster ACK
- Peroleh informasi pendaftaran GitLab Runners.
- Peroleh informasi pendaftaran runners untuk proyek ini.
- Masuk ke konsol GitLab.
- Di bilah navigasi atas konsol GitLab, pilih .
- Pada tab Your projects, pilih proyek yang ingin digunakan.
- Di panel navigasi sebelah kiri, pilih .
- Klik Expand di sebelah kanan Runners.

- Salin URL dan token pendaftaran.

- Peroleh informasi pendaftaran group runners.
- Di bilah navigasi atas, pilih .
- Pada tab Your groups, pilih grup yang diperlukan.
- Di panel navigasi sebelah kiri, pilih .
- Klik Expand di sebelah kanan Runners.

- Salin URL dan token pendaftaran.

- Peroleh informasi pendaftaran shared runners. Catatan Hanya administrator yang memiliki izin untuk melaksanakan langkah ini.
- Di bilah navigasi atas, klik
untuk masuk ke halaman Admin Area. - Di panel navigasi sebelah kiri, pilih .
- Salin URL dan token pendaftaran.

- Di bilah navigasi atas, klik
- Peroleh informasi pendaftaran runners untuk proyek ini.
- Jalankan perintah berikut untuk mendapatkan salinan Helm chart dari GitLab Runner:
git clone https://github.com/haoshuwei/gitlab-runner.gitGanti bidang gitlabUrl dan runnerRegistrationToken sesuai dengan kode berikut:## GitLab Runner Image ## image: gitlab/gitlab-runner:alpine-v11.4.0 ## Specify a imagePullPolicy ## imagePullPolicy: IfNotPresent ## Default container image to use for initcontainer init: image: busybox tag: latest ## The GitLab Server URL (with protocol) that want to register the runner against ## gitlabUrl: http://xx.xx.xx.xx/ ## The Registration Token for adding new Runners to the GitLab Server. This must ## be retreived from your GitLab Instance. ## runnerRegistrationToken: "AMvEWrBTBu-d8czE****" ## Unregister all runners before termination ## unregisterRunners: true ## Configure the maximum number of concurrent jobs ## concurrent: 10 ## Defines in seconds how often to check GitLab for a new builds ## checkInterval: 30 ## For RBAC support: ## rbac: create: true clusterWideAccess: false ## Configure integrated Prometheus metrics exporter ## metrics: enabled: true ## Configuration for the Pods that that the runner launches for each new job ## runners: ## Default container image to use for builds when none is specified ## image: ubuntu:16.04 ## Specify the tags associated with the runner. Comma-separated list of tags. ## tags: "k8s-runner" ## Run all containers with the privileged flag enabled ## This will allow the docker:dind image to run if you need to run Docker ## commands. Please read the docs before turning this on: ## privileged: true ## Namespace to run Kubernetes jobs in (defaults to the same namespace of this release) ## namespace: gitlab cachePath: "/opt/cache" cache: {} builds: {} services: {} helpers: {} resources: {} - Jalankan perintah berikut untuk menginstal GitLab Runner:
- Paketkan Helm chart dari GitLab Runner.
helm package .Output yang diharapkan:
Successfully packaged chart and saved it to: /root/gitlab/gitlab-runner/gitlab-runner-0.1.37.tgz - Instal GitLab Runner.
helm install --namespace gitlab gitlab-runner *.tgz
Periksa apakah Deployment atau pod terkait telah dimulai. Jika Deployment atau pod terkait telah dimulai, GitLab runners yang terdaftar akan ditampilkan di GitLab, seperti yang ditunjukkan pada gambar berikut.
- Paketkan Helm chart dari GitLab Runner.
Pengaturan cache
GitLab Runner memiliki kapasitas cache yang terbatas. Anda harus memasang volume untuk menyimpan data cache. Dalam contoh sebelumnya, direktori /opt/cache digunakan sebagai direktori cache default setelah GitLab Runner diinstal. Anda dapat mengubah bidang runners.cachePath di file values.yaml untuk mengubah direktori cache.
MAVEN_OPTS ke bidang variables dan tentukan direktori cache lokal. Kode berikut adalah contohnya: variables:
KUBECONFIG: /etc/deploy/config
MAVEN_OPTS: "-Dmaven.repo.local=/opt/cache/.m2/repository"cat >>/home/gitlab-runner/.gitlab-runner/config.toml <<EOF
[[runners.kubernetes.volumes.pvc]]
name = "gitlab-runner-cache"
mount_path = "{{ .Values.runners.cachePath }}"
[[runners.kubernetes.volumes.host_path]]
name = "docker"
mount_path = "/var/run/docker.sock"
read_only = true
host_path = "/var/run/docker.sock"
EOFTetapkan variabel global
- Di bilah navigasi atas, pilih .
- Pada tab Your projects, pilih proyek yang ingin digunakan.
- Di panel navigasi sebelah kiri, pilih .
- Klik Expand di sebelah kanan Variables. Tambahkan variabel lingkungan untuk GitLab Runner. Dalam contoh ini, tambahkan variabel berikut:

- REGISTRY_USERNAME: Nama pengguna untuk masuk ke repositori image.
- REGISTRY_PASSWORD: Kata sandi untuk masuk ke repositori image.
- kube_config: KubeConfig sebagai string terenkripsi.
Jalankan perintah berikut untuk mengonversi KubeConfig menjadi string terenkripsi:echo $(cat ~/.kube/config | base64) | tr -d " "
Edit file .gitlab-ci.yml
Gunakan file .gitlab-ci.yml untuk mengompilasi kode sumber, membangun image, mendorong image, dan menyebarkan aplikasi untuk proyek demo Java. Untuk informasi lebih lanjut, lihat .gitlab-ci.yml.example dari proyek gitlabci-java-demo.
image: docker:stable
stages:
- package
- docker_build
- deploy_k8s
variables:
KUBECONFIG: /etc/deploy/config
MAVEN_OPTS: "-Dmaven.repo.local=/opt/cache/.m2/repository"
mvn_build_job:
image: maven:3.6.2-jdk-14
stage: package
tags:
- k8s-runner
script:
- mvn package -B -DskipTests
- cp target/demo.war /opt/cache
docker_build_job:
image: docker:latest
stage: docker_build
tags:
- k8s-runner
script:
- docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry.cn-beijing.aliyuncs.com
- mkdir target
- cp /opt/cache/demo.war target/demo.war
- docker build -t registry.cn-beijing.aliyuncs.com/haoshuwei24/gitlabci-java-demo:$CI_PIPELINE_ID .
- docker push registry.cn-beijing.aliyuncs.com/haoshuwei24/gitlabci-java-demo:$CI_PIPELINE_ID
deploy_k8s_job:
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
stage: deploy_k8s
tags:
- k8s-runner
script:
- mkdir -p /etc/deploy
- echo $kube_config |base64 -d > $KUBECONFIG
- sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml
- cat deployment.yaml
- kubectl apply -f deployment.yamlimage: docker:stable # Secara default, jika tidak ada image yang ditentukan untuk setiap tahap pipeline, image docker:stable digunakan.
stages:
- package # Kemas kode sumber.
- docker_build # Bangun, kemas, dan dorong image.
- deploy_k8s # Sebarkan aplikasi.
variables:
KUBECONFIG: /etc/deploy/config # Tentukan variabel global KUBECONFIG.- Kemas kode sumber menggunakan Apache Maven.
mvn_build_job: # Nama pekerjaan. image: maven:3.6.2-jdk-14 # Image yang digunakan dalam tahap ini. stage: package # Nama tahap. tags: # Tag dari image GitLab Runner. - k8s-runner script: - mvn package -B -DskipTests # Jalankan skrip pembuatan. - cp target/demo.war /opt/cache # Simpan hasil pembuatan ke cache. - Bangun, kemas, dan dorong image.
docker_build_job: # Nama pekerjaan. image: docker:latest # Image yang digunakan dalam tahap ini. stage: docker_build # Nama tahap. tags: # Tag dari image GitLab Runner. - k8s-runner script: - docker login -u $REGISTRY_USERNAME -p $REGISTRY_PASSWORD registry.cn-beijing.aliyuncs.com # Masuk ke repositori image. - mkdir target - cp /opt/cache/demo.war target/demo.war - docker build -t registry.cn-beijing.aliyuncs.com/haoshuwei24/gitlabci-java-demo:$CI_PIPELINE_ID . # Kemas image Docker. Gunakan ID pipeline sebagai tag-nya. - docker push registry.cn-beijing.aliyuncs.com/haoshuwei24/gitlabci-java-demo:$CI_PIPELINE_ID # Dorong image Docker. - Sebarkan aplikasi.
deploy_k8s_job: # Nama pekerjaan. image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6 # Image yang digunakan dalam tahap ini. stage: deploy_k8s # Nama tahap. tags: # Tag dari image GitLab Runner. - k8s-runner script: - mkdir -p /etc/deploy - echo $kube_config |base64 -d > $KUBECONFIG # Konfigurasikan file config yang digunakan untuk terhubung ke kluster Kubernetes. - sed -i "s/IMAGE_TAG/$CI_PIPELINE_ID/g" deployment.yaml # Gantikan secara dinamis tag image di file deployment. - cat deployment.yaml - kubectl apply -f deployment.yaml
Jalankan pipeline


Akses aplikasi
Secara default, jika tidak ada namespace yang ditentukan dalam file deployment, aplikasi diterapkan di namespace GitLab.
kubectl -n gitlab get svc Output yang diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
java-demo LoadBalancer 172.19.9.252 xx.xx.xx.xx 80:32349/TCP 1mKunjungi xx.xx.xx.xx/demo menggunakan browser Anda untuk mengakses aplikasi.
Untuk informasi lebih lanjut tentang ACK, lihat Container Service for Kubernetes.
Untuk informasi lebih lanjut tentang GitLab CI, lihat GitLab CI.