close

前一陣子在研究 CI/CD,想到前公司是使用 GitLab 作為版本控管以及 CI/CD 的解決方案,那就來架一台試試看吧。現在要自架 GitLab 服務相當簡單,除了自己準備好環境即可一鍵安裝,使用 docker 快速建立也是個好選擇。以下分別以二種方式進行安裝,順便留個紀錄:

GCP

  • 建立 Compute Engine,GitLab 服務本身算是蠻吃記憶體的,官方建議的配備是四核心 CPU 以及 4GB 以上的 RAM。我開了一台雙核 4GB 的機器個人使用沒有問題,再低可能會有跑不起來的問題,請選用 e2-medium (2 個 vCPU,4 GB 記憶體) 以上等級的規格
  • 根據官方提供的安裝文件進行安裝,這邊以 ubuntu 為例
    # 更新套件來源並安裝相關套件
    sudo apt-get update
    sudo apt-get install curl openssh-server ca-certificates postfix tzdata -y
    
    # 下載 gitlab ce 一鍵安裝包
    curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
    
    # 安裝 gitlab ce
    sudo apt-get install gitlab-ce
    
    # 修改 external_url 參數為對外網址
    sudo vi /etc/gitlab/gitlab.rb
    
    # 更新設定並重新啟動 GitLab
    sudo gitlab-ctl reconfigure
  • 第一次 GitLab 連線需要設定 root 的密碼,設定完後就算是建立完成了
  • 因為之後需要串 CI/CD,所以還需要建立 GitLab Runner;它算是實際執行 CI/CD 時的程序。安裝方式也有很多種,這邊我偷懶使用 docker 快速建立,請先確認 docker 已經安裝完成
    # 啟用一個 GitLab Runner 的 docker container
    docker run -d --name gitlab-runner --restart always \
      -v /var/run/docker.sock:/var/run/docker.sock \
      -v /srv/gitlab-runner/config:/etc/gitlab-runner \
      gitlab/gitlab-runner:latest
    
    # 查看列表確認是否啟用成功
    docker ps -a

docker on NAS

  • 這邊以 NAS 為主,去年趁雙 11 特價購入的 NAS 上面,已有多個使用 docker 自架的服務;不過自行升級到 16GB 的記憶體使用率一直很低...明明有多餘的 RAM 卻沒有用到感覺很虧!(咦?)這次試著在上面安裝 GitLab,總算是讓使用率突破 20% 了!以下是 QNAP Container Station,docker-compose.yml 的設定,這邊一併把 GitLab Runner 也包含進去:
    version: '3'
    
    services:
            gitlab:
                    image: gitlab/gitlab-ce:latest
                    container_name: gitlab
                    restart: always
                    environment:
                            GITLAB_OMNIBUS_CONFIG: |
                                    # GitLab 對外網址
                                    external_url "https://gitlab.xxx"
                                    # ssh 對外顯示 port;這邊要特別注意,這個 port 是對外顯示用,所以要跟下面 ports 對應,但實際 docker 內部仍是使用 22 作為 ssh 的 port
                                    gitlab_rails['gitlab_shell_ssh_port'] = 50022
                                    gitlab_rails['lfs_enabled'] = true
                                    gitlab_rails['manage_backup_path'] = true
                                    gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
                                    gitlab_rails['backup_keep_time'] = 604800
                                    gitlab_rails["time_zone"] = "Asia/Taipei"
                                    # 這邊因為我有用 SSH Tunnel 服務,所以只開 80 port
                                    nginx['listen_port'] = 80
                                    nginx['listen_https'] = false
                                    # GitLab 有內建 letsencrypt 自動更新,不過我有透過 SSH Tunnel 服務已有 https,不確定設定這個是不是有用...
                                    letsencrypt['enable'] = true
                                    # 憑證快到期仍未更新時,發送通知的 email
                                    letsencrypt['contact_emails'] = ['gitlab@gmail.com']
                                    letsencrypt['auto_renew_hour'] = "12"
                                    letsencrypt['auto_renew_minute'] = "30"
                                    letsencrypt['auto_renew_day_of_month'] = "*/7"
    
                    volumes:
                            - ./gitlab/config:/etc/gitlab
                            - ./gitlab/logs:/var/log/gitlab
                            - ./gitlab/data:/var/opt/gitlab
                    ports:
                            - "50443:443"
                            - "50080:80"
                            - "50022:22"
            gitlab-runner:
                    container_name: gitlab-runner
                    image: gitlab/gitlab-runner:latest
                    restart: always
                    volumes:
                            - "/var/run/docker.sock:/var/run/docker.sock"
                            - "./gitlab/runner-config:/etc/gitlab-runner"

shared Runner

  • 接下來我們要註冊一個 Shared runner,讓在這個 GitLab 裡面的專案都可以透過這個 Runner 跑 CI/CD 的 jobs
  • 先進入 GitLab 的 Admin Area,點選 Runner 查看列表
  • 2021-01-17T02-39-15.485Z.png
  • 右上方的 Set up a shared Runner manually 區塊有一些註冊時需要輸入的訊息:2. 是 GitLab 的對外網址 3. 是 token
  • 使用剛剛啟用的 gitlab-runner container
    # 註冊 GitLab Runner
    docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
     
    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
    # 這邊輸入 GitLab 的對外網址,參考 Set up a shared Runner manually 2. 的部分
    
    Please enter the gitlab-ci token for this runner
    # 這邊輸入 GitLab 的 token,參考 Set up a shared Runner manually 3. 的部分
    
    Please enter the gitlab-ci description for this runner
    # 這邊可以設定這個 Runner 的說明,非必填
    
    Please enter the gitlab-ci tags for this runner (comma separated):
    # 這邊可以設定這個 Runner 的 tags,非必填
    
    Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
    docker
    # 選擇這個 Runner 的執行方式,因為我們是使用 docker 啟用,所以這邊要輸入 docker
    docker
    
    Please enter the Docker image (eg. ruby:2.6):
    # 執行時預設啟用的 docekr image,這邊視專案而定,之後在 .gitlab-ci.yml 也可以更改
  • 設定完成後如果沒有問題,就會在 Admin Area > Runner 列表中出現

以上完成安裝 GitLab,以及註冊啟用 GitLab Runner,算是完成 CI/CD 的前置作業,之後要如何設定專案 CI/CD,以及 .gitlab-ci.yml;或許下次有機會再分享?也可以參考一下後面提供的參考資料連結,自行實作看看喔!

參考資料

 ​​

arrow
arrow

    danielhuang030 發表在 痞客邦 留言(0) 人氣()