.Net Core自動化部署系列(三):使用GitLab CI/CD 自動部署Api到Docker


之前寫過使用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的自動化編譯、測試、發布流程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM