GitLab私有化部署 - CI/CD - 持續集成/交付/部署 - 源代碼托管 & 自動化部署( 二 )

注冊 GitLab-runner首先查看在GitLab頁面的 菜單 > 設置 > CI/CD > Runner 中提到的內容 。如下圖所示:

GitLab私有化部署 - CI/CD - 持續集成/交付/部署 - 源代碼托管 & 自動化部署

文章插圖
接下來開始注冊 GitLab-runner:
# 按照官網的描述,注冊完成后,才可以使用GitLab-runner的實例# 啟動后的注冊命令,注冊過程中,需要按提示填寫幾項內容gitlab-runner register注冊過程中 , 填寫的內容如下圖所示:
GitLab私有化部署 - CI/CD - 持續集成/交付/部署 - 源代碼托管 & 自動化部署

文章插圖
注冊完成后,Runner 區域會多出一個 [可用的指定runner實例] 。
配置 GitLab-runner對 [可用的指定runner] 做一個簡單的配置,這里設置自動部署的觸發條件 , 以執行 CI/CD 中的流水線 。如下圖所示:
GitLab私有化部署 - CI/CD - 持續集成/交付/部署 - 源代碼托管 & 自動化部署

文章插圖
GitLab私有化部署 - CI/CD - 持續集成/交付/部署 - 源代碼托管 & 自動化部署

文章插圖
以上場景:當有新的簽入變更時 , 觸發 CI/CD 中流水線的執行 。
Git 安裝在自動化部署時,這里計劃用 Git 工具來遠程拉取源代碼,以便于后續的編譯發布動作 。
dnf install git -ydotnet 環境自動部署時 , 需要編譯發布過程,所以這里安裝 dotnet-sdk微軟官方提供的鏡像站:https://packages.microsoft.com/config/
# 首先安裝微軟鏡像庫,以便于從微軟鏡像站中安裝所需的 dotnet-sdk 等# 這里選用與環境適配的軟件庫 RHEL8版 下載到 /etc/yum.repos.d/ 中curl -O /etc/yum.repos.d/ https://packages.microsoft.com/config/rhel/8/prod.repo# 重建鏡像庫緩存dnf clean packages && dnf clean all && dnf makecache## 先安裝運行 dotnet 時必要的 libicu 工具dnf install libicu -y# 安裝適合于開發環境的 dotnet-sdk-6.0(SDK版支持測試、編譯、發布、運行等)dnf install dotnet-sdk-6.0 -y自動化部署配置首先自定義一個存放部署文件的目錄,假設創建 /opt/gitlab-devops-app 作為部署的目錄 。
# 安裝 gitlab-runner 時,已經創建了名為 gitlab-runner 的用戶名# 后續會用 gitlab-runner 在此做拉取源代碼、編譯、發布等動作# 這里授予 gitlab-runner 的所屬用戶對部署文件夾的操作權限# 賦予所屬用戶chown -R gitlab-runner:gitlab-runner /opt/gitlab-devops-app# 并授予可執行權限chmod -R +x /opt/gitlab-devops-app自動化部署 - CI/CD 流水線配置在CI/CD菜單的編輯器中 , 先選擇對應的項目分支,再配置流水線按鈕,自動生成名為 .gitlab-ci.yml 的文件于此項目的根目錄;在這里,流水線配置文件 .gitlab-ci.yml 決定了自動化部署的步驟過程 。起初GitLab會給出一個配置模板,這里將配置好的內容如下:
# 總流程 - 按序運行# 這里自定義了七個步驟,可按實際情況自定義名稱和順序,通過命令完成部署stages:           # List of stages for jobs, and their order of execution  - stop          # Job1:停止原有站點運行  - clear         # Job2:清除原有部署文件  - clone         # Job3:遠程克隆源代碼  - test          # Job4:單元測試  - build         # Job5:編譯源代碼  - publish       # Job6:發布項目  - deploy        # Job7:重新啟動站點運行#### 以下每個作業(步驟節點)對應上述總流程的步驟名稱,如下示例每個節點區塊格式:# {自定義作業名稱}:#  stage: {對應上述總流程定義的作業節點名稱}#  script:#  - {按序單行要執行的命令}#  - {按序單行要執行的命令}#### Job1:停止原有站點運行stop-job:  stage: stop  script:    - ps -ef | grep Web.dll | grep -v grep | awk '{print $2}' | xargs -r kill -9 && true=0 || false=1## Job2:清除原有部署文件clear-job:  stage: clear  script:    - cd /opt/gitlab-devops-app/    - rm -rvf my-project-test## Job3:遠程克隆源代碼clone-job:  stage: clone  script:    - cd /opt/gitlab-devops-app/    - git clone -b {分支名稱} http://{用戶名}:{密碼}@{ServerIP}/{project-url}/my-project-test.git## Job4:單元測試;對克隆下來的源代碼進行操作unit-test-job: stage: test script:   - cd /opt/gitlab-devops-app/my-project-test/Web/   - dotnet test Web.csproj## Job5:編譯源代碼build-job:  stage: build  script:    - cd /opt/gitlab-devops-app/my-project-test/Web/    - dotnet build --configuration Release## Job6:發布項目publish-job:  stage: publish  script:    - mkdir /opt/gitlab-devops-app/my-project-test/publish/    - cd /opt/gitlab-devops-app/my-project-test/Web/    - dotnet publish --configuration Release --no-build --output ../publish/## Job7:重新啟動站點運行deploy-job:  stage: deploy  environment: production  script:    - cd /opt/gitlab-devops-app/my-project-test/publish/    - nohup dotnet Web.dll --urls http://*:5000 > /dev/null 2>&1 &

推薦閱讀