之前寫過使用Jenkins實現自動化部署,最近正好沒事研究了下GitLab的自動化部署,順便記錄一下。
使用GitLab部署我們需要准備兩件事,第一個起碼你得有個GitLab,自己搭建或者使用官方的都可以哈,我這里使用的官方的,想自己搭建的同學可以參考下這篇,使用Docker搭建GitLab:
https://www.imooc.com/article/23168
有了GitLab之后我們還需要自己安裝部署GitLab Runner,GitLabRunner是用來拉取GitLab倉庫的代碼,並根據你得.gitlab-ci.yml腳本來對代碼進行編譯部署,通常為了分散壓力和風險GitLab和GitLabRunner不會在同一台服務器,我這里使用本地的虛擬機來進行安裝GitLab Runner。
因為我是要部署在Docker里,所以在安裝GitLab Runner之前我們最好先把Docker安裝好,沒安裝的同學可以參考下面的腳本:
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
systemctl enable docker
systemctl start docker
新安裝的話也把鏡像加速器配置下,不然下載鏡像特別慢。
安裝GitLabRunner
1.添加repository
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
2.安裝包
https://blog.csdn.net/weiguang1017/article/details/77720778
3.注冊runner
sudo gitlab-runner register
然后會提示我們輸入GitLab倉庫相應的信息,我們首先去GitLab中你要部署的項目,選擇 Settings - CI/CD :
第一個要求輸入URL,第二個要求輸入Token。
有一步是讓輸入標簽 “Please enter the gitlab-ci tags for this runner (comma separated):”,這一步可以什么都不輸入,直接跳過。
接着會詢問是否鎖定當前項目“Whether to lock Runner to current project [true/false]:”,輸入False。
最后一個選擇Runner的執行方式,因為我這里並不是Docker部署的,所以輸入 Shell。
完成之后刷新一下GitLab的剛才那個頁面就會看到我們注冊的Runner信息了:
然后編輯一下你對應的Runner,修改一處地方:
把上面標記的那個選項勾選上,表示無標簽的任務也可以運行。
到這里還會有問題,因為Git Runner運行的時候默認會使用gitlab-runner用戶去運行腳本,但是這個用戶默認沒有Docker的操作權限,所以如果直接測試會報錯:“couldn't connect to Docker daemon at http+docker.......”,因此我們需要給這個用戶開通下權限,在Git Runner服務器上執行如下腳本:
sudo groupadd docker sudo gpasswd -a gitlab-runner docker sudo service docker restart(或者systemctl start docker) newgrp - docker
到這里Git Runner安裝就算完成了,下面我們來測試。
自動部署測試
新建.net core Api項目 WebTest,項目里添加Dockerfile:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /src Copy . . RUN dotnet restore RUN dotnet build -c Release -o /app FROM build as publish RUN dotnet publish -c Releease -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "WebTest.dll"]
然后在項目文件根目錄下,注意是根目錄哦,就是和解決方案同一級目錄下添加.gitlab-ci.yml腳本文件,這個就是專門用來執行部署命令的,腳本規則參考官方:
https://docs.gitlab.com/ee/ci/yaml/README.html#only-and-except-simplified
stages: - deploy_dev deploy_dev_job: stage: deploy_dev environment: name: development only: - master script: # 發布程序並部署運行 - cd WebTest - docker stop webTest - docker rm webTest - docker rmi webtest - docker build -t webtest . - docker run -d --name webTest -p 8010:80 webtest
因為是測試,我這里很簡單,標准是三個流程,我這里只用到了部署流程,script哪里就是我要執行的腳本命令,可以看到這里就是每次執行先把上次的容器和鏡像刪除,然后重新build一個鏡像,部署到8010端口。
寫好這些之后,我們就可以提交代碼了,提交之后去GitLab中查看部署狀態:
可以看到你提交的代碼到底有沒有部署成功,我們可以點擊狀態按鈕查看詳細信息:
如果失敗了,可以通過這里查看具體的原因。可以看到我最新的提交已經通過來,OK,我們現在可以通過瀏覽器訪問了,服務器IP:8010:
可以看到正常訪問,看下Docker容器信息:
OK,大功告成,本篇只是個小的Demo,下一篇會使用GitLab CI/CD實現商城項目 k8s的自動化編譯、測試、發布流程。