Dalam setiap proyek yang menghargai diri sendiri, insinyur QA harus berpartisipasi. Setiap hari mereka akan dihadapkan dengan tugas memverifikasi pemenuhan tugas di cabang terpisah. Sangat sering, proses peralihan ke cabang yang diinginkan, perakitan dan pengujian membutuhkan banyak waktu, di samping itu, secara lokal tidak selalu memungkinkan untuk sepenuhnya menciptakan kembali lingkungan tempur yang paling identik.
Tujuan artikel ini adalah untuk menunjukkan teknik sederhana untuk mendirikan stan di beberapa cabang. Artikel ini ditulis oleh pengembang dari pengembang, jadi sepertinya tidak terlalu menarik bagi insinyur profesional DevOps.
Persyaratan:- Gitlab (bare metal / cloud)
- Server khusus
- Domain gratis
Langkah Satu: Konfigurasikan Gitlab
- Instal Gitlab Runner di server khusus Anda
- Buat pekerja yang mendukung pembuatan gambar buruh pelabuhan
- Aktifkan Registry Penampung
Langkah dua: pengaturan server
- Instal Docker
- Instal Tulis
- Buat pengguna:
- Menyiapkan traefik (permintaan proxy server ke wadah Docker berdasarkan label (label)):
$ sudo mkdir -p /opt/traefik $ docker network create web
/opt/traefik/docker-compose.yml
version: '2' services: traefik: image: traefik:1.4.6 restart: always ports: - 80:80 networks: - web volumes: - /var/run/docker.sock:/var/run/docker.sock - ./traefik.toml:/traefik.toml container_name: traefik networks: web: external: true
/opt/traefik/traefik.toml
Ganti DOMAIN.COM dengan domain Anda.
debug = true checkNewVersion = true logLevel = "ERROR" defaultEntryPoints = ["http"] [entryPoints] [entryPoints.http] address = ":80" [retry] [docker] endpoint = "unix:///var/run/docker.sock" domain = "DOMAIN.COM" watch = true exposedbydefault = false
- Jalankan traefik:
cd /opt/traefik && docker-compose up -d
- Tambahkan catatan untuk DOMAIN.COM dari formulir '*' - IP dari server khusus.
Langkah Tiga: Mempersiapkan Repositori
- Tambahkan ke akar repositori Dockerfile:
FROM node:8.9 as build-deps WORKDIR /usr/src/app COPY package.json ./ RUN npm i COPY . ./ RUN npm run build FROM nginx:1.12-alpine COPY
Ubah
npm run build
ke tim build Anda. Edit jalur dengan cara yang sama.
/usr/src/app/dist
mengubah dist ke direktori build Anda.
Anda dapat membaca lebih lanjut tentang perintah struktur dan dockerfire di sini .
- Tambahkan file .gitlab-ci.yml dengan bagian perakitan gambar:
image: docker:stable variables: DOCKER_HOST: tcp://docker:2375/ DOCKER_DRIVER: overlay2 GITLAB_DOMAIN: gitlab.com services: - docker:dind stages: - build build_staging: stage: build script: - export GITLAB_DOMAIN=gitlab.com - export CONTAINER_IMAGE=$GITLAB_DOMAIN/frontend/main/image - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $GITLAB_DOMAIN - docker pull $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG || true - export URL="Host:${CI_COMMIT_REF_NAME}.tests.DOMAIN.COM" - docker build -t $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG . --label "traefik.backend=${CI_COMMIT_REF_NAME}" --label "traefik.frontend.rule=${URL}" - docker push $CONTAINER_IMAGE:$CI_COMMIT_REF_SLUG
- Tambahkan kunci pribadi deployer@DOMAIN.COM ke pengaturan repositori (Pengaturan -> CI / CD -> Variabel) sebagai SSH_PRIVATE_KEY
- Tambahkan bagian penyebaran:
stages: - build - deploy /// .... deploy_staging: stage: deploy image: kroniak/ssh-client:3.6 script: - mkdir ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - ssh deployer@DOMAIN.COM "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $GITLAB_DOMAIN" - ssh deployer@DOMAIN.COM "docker stop frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rm frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rmi GITLAB-DOMAIN.COM/frontend/main/image:${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker run --name frontend_${CI_COMMIT_REF_SLUG} --network=web -d $GITLAB_DOMAIN/frontend/main/image:${CI_COMMIT_REF_SLUG}" environment: name: review/$CI_COMMIT_REF_NAME url: http://${CI_COMMIT_REF_NAME}.tests.DOMAIN.COM on_stop: stop_staging stop_staging: stage: deploy image: kroniak/ssh-client:3.6 variables: GIT_STRATEGY: none script: - mkdir ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - ssh deployer@DOMAIN.COM "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN GITLAB-DOMAIN.COM" - ssh deployer@DOMAIN.COM "docker stop frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rm frontend_${CI_COMMIT_REF_SLUG}" || true - ssh deployer@DOMAIN.COM "docker rmi $GITLAB_DOMAIN/frontend/main/image:${CI_COMMIT_REF_SLUG}" || true when: manual environment: name: review/$CI_COMMIT_REF_NAME action: stop
Langkah-langkah di atas sudah cukup untuk mendapatkan hasil berikut:
- Setiap komit baru ke cabang memulai perakitan dan penyebaran kode terbaru saat ini di% branch_name% .tests.DOMAIN.COM
- Gitlab mencakup mekanisme lingkungan yang memungkinkan Anda membuat / menghapus / membuka gambar yang terkunci dalam beberapa sentuhan
Langkah selanjutnya:
- Siapkan bagian terpisah untuk majelis penyihir. Dalam kasus wizard, masuk akal untuk memberi tag pada gambar melalui COMMIT_SHA
- Tambahkan konfigurasi ke nginx di buruh pelabuhan
- Meneruskan parameter rakitan bundel melalui mekanisme dockerfile ARG dan ENV
- Konfigurasikan penggunaan cache dari gambar untuk rakitan
Berdasarkan artikel tersebut.