Gitlab-CI/CD
Gitlab-Runner自動構建伺服器搭建1
這裡講到的gitlab倉庫指的是https://gitlab.com/,自建gitlab倉庫也基本相同。
專案的構建打包過程相對比較消耗系統性能,所以gitlab將這部分任務都交給了gitlab-runner來做,因為gitlab-runner可以部署到不同的機器上。這樣在構建的時候就不會影響gitlab伺服器的效能。而gitlab ci僅用來管理專案的構建狀態等輕量工作。
gitlab倉庫提供了兩種Runner自動構建的方案:一種是Specific Runners,另一種是Shared Runners。 在專案的settings/ci_cd頁面中展開Runners可以看到兩個功能區,分別用來設定不同型別的Runners。
Specific Runners——使用指定的構建伺服器進行自動構建任務,通常用於自建Runner伺服器。
Shared Runners——使用gitlab官方提供的共享伺服器進行自動構建任務。
這裡以自建gitlab-runner伺服器為例;
基於Docker構建自定義Gitlab-Runner映象
這裡使用的系統是Ubuntu 14.04.5 LTS 。
準備伺服器環境
首先登入伺服器,確定伺服器已經安裝docker及docker compose。
執行以下命令檢視docker與docker-compose版本資訊:
docker -v Docker version 18.06.3-ce, build d7080c1 docker-compose -v docker-compose version 1.26.2, build eefe0d31
建立docker-compose.yml檔案
建立目錄/usr/local/docker/runner,切換當前目錄到runner;在當前目錄中建立config資料夾和docker-compose.yml檔案;config資料夾將會被配置為儲存gitlab-runner配置的資料夾。
使用vim建立docker-compose.yml檔案:
version: "3.3" services: gitlab-runner: build: environment container_name: gitlab-runner-compose restart: always volumes: - ./config:/etc/gitlab-runner - /var/run/docker.sock:/var/run/docker.sock
environment指定了構建映象的dockerfile檔案地址,系統會到指定的資料夾中找到Dockerfile(預設名)檔案。
volumes配置了gitlab-runner容器配置檔案在宿主機上的儲存位置。繫結容器的docker.sock目錄到宿主機的對應目錄,這樣容器在執行時就可以使用宿主機的docker service執行docker命令。
建立Dockerfile檔案
官方提供的gitlab-runner映象只是一個純淨的基礎環境,我們需要將專案的依賴環境整合到基礎映象中,下面我們就通過Dockerfile將專案依賴整合到gitlab-runner映象。
在當前目錄建立environment資料夾用於存放依賴檔案,切換到/usr/local/docker/runner/environment目錄下;
執行vim Dockerfile建立檔案:
FROM gitlab/gitlab-runner
MAINTAINER Andy [email protected]
#安裝docker-ce===================
RUN apt-get update -y && apt-get clean
RUN apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common && \
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
apt-get update -y && \
apt-get install -y docker-ce
#================================
#切換映象目錄,安裝專案依賴node======
WORKDIR /usr/local/node
RUN wget https://nodejs.org/dist/v12.18.2/node-v12.18.2-linux-x64.tar.xz && \
tar xf node-v12.18.2-linux-x64.tar.xz && \
rm -rf node-v12.18.2-linux-x64.tar.xz && \
mv node-v12.18.2-linux-x64 node-v12.18.2 && \
ln -s /usr/local/node/node-v12.18.2/bin/node /usr/bin/node && \
ln -s /usr/local/node/node-v12.18.2/bin/npm /usr/bin/npm
#=================================
WORKDIR /
在Dockerfile檔案中做了三件事:
1)引用gitlab/gitlab-runner作為基礎映象;
2)使用RUN命令安裝docker,安裝命令參考docker官方Install on Ubuntu;
3)下載node並解壓,使用ln -s命令配置軟連線,方便全域性訪問node和npm。
注意:這裡安裝的docker只是存在於映象中的一個docker客戶端,用於和宿主機docker service通訊。
構建、執行自定義的gitlab-runner映象
切換到上級目錄/usr/local/docker/runner,執行docker-compose up -d命令,系統會按照docker-compose.yml檔案的配置執行映象構建和執行任務,執行docker-compose ps命令可以檢視剛剛啟動的容器。
到此我們的自定義gitlab-runner映象就構建完成了,這個映象構建成功後可以複用給其他的nodejs專案。下一章我們將專案倉庫註冊到我們的gitlab-runner服務中,編寫.gitlab-ci.yml檔案來管理自動構建任務,實現專案的本地推送自動觸發構建任務功能。