iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 26
0
DevOps

Best Practice for DevOps on GitLab and GCP系列 第 26

Best Practice for DevOps on GitLab and GCP : DevOps Lab 自動化腳本 - 映像檔篇 - Day 26 -

Containerized

前言

要開始撰寫腳本咯 ~ 根據開篇的規劃要以 Docker Image 的形式進行建置、發佈和佈署,所以首先要先使用腳本利用 dind 的方式來建立映像檔。製作成映像檔後就可以根據需求來決定,今天的這個檔案是要拿去放置到要佈署的機器,或是拿去放到發佈的地方。

撰寫建置腳本

  1. 首先要使用到建置映像檔就需要 dind 這時,相依於 docker:dind 的服務。因此腳本上會有以下設定
services:
  - docker:dind

variables:
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""
  1. 在相依 dind 後自身容器是必須有 docker 指令,所以 image 一般會設定為 docker:stable。不過作者推薦也可以使用 google/cloud-sdk:latest 同樣擁有 docker 指令外還擁有 kubectlgcloud...等好用的指令
image: google/cloud-sdk:latest
  1. 滿足第 1, 2 項後再來要新增一個 job 來建置映像檔,並指定使用先前文章所建立的 Runner 因此設定 devops-runer 標籤
build:
  script:
    - docker build --pull -t devops-lab-image .
  tags:
    - devops-runner
  1. 到此我們先來看一下一個完整可以建置映像檔的腳本大概長什麼樣。
image: google/cloud-sdk:latest

services:
  - docker:dind

variables:
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""

build:
  script:
    - docker build --pull -t devops-lab-image .
  tags:
    - devops-runner
  1. 將腳本撰寫入在 dev branch 中的 .gitlab-ci.yml 並推送至伺服器上

Imgur

將映像檔上傳至 GitLab 容器登入表

  1. GitLab 有提供一個空間可以存放映像檔,可以通過以下方式完成 docker 登入
before_script:
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  1. 調整 build 時的 tag 名稱及增加 psuh 指令
variables:
  IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
  
build:
  script:
    - docker build -t $IMAGE_TAG .
    - docker push $IMAGE_TAG
  1. 完成後腳本就變成
image: google/cloud-sdk:latest

services:
  - docker:dind

variables:
  DOCKER_HOST: tcp://docker:2375/
  DOCKER_DRIVER: overlay2
  DOCKER_TLS_CERTDIR: ""
  IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG

before_script:
  - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  
build:
  script:
    - docker build -t $IMAGE_TAG .
    - docker push $IMAGE_TAG
  tags:
    - devops-runner
  1. 當執行完成後可以在 軟體包 > 容器登入表 中看到已經被建置好的映像檔

Imgur

參考


上一篇
Best Practice for DevOps on GitLab and GCP : DevOps Lab 自動化腳本 - 專案篇 - Day 25 -
下一篇
Best Practice for DevOps on GitLab and GCP : DevOps Lab 自動化腳本 - 權限篇 - Day 27 -
系列文
Best Practice for DevOps on GitLab and GCP30

尚未有邦友留言

立即登入留言