gitlab 的 CI/CD 初次嘗試


一、前言

ci/cd 持續集成持續交付,開發人員嘗嘗會遇到一些重復工作,比如一個asp.net的網站代碼,寫完之后要發布,然后再將發布內容移動到部署的服務器上再進行部署,就算你只改了一個頁面上的一個字,也要將之前的發布部署過程重新做一遍。

CI 解決了這個重復性問題,開發人員只需git push 提交代碼,剩下的工作交給CI , 做CI工作的有gitlab-ci/cd  Jenkins k8s等,中小項目gitlab-ci比較合適,因為它更輕量級一些,本篇僅討論gitlab的cicd功能。

二、環境

 

IP 角色
192.168.10.202(ubuntu) gitlab
192.168.10.208(centos) git,docker,gitlab-runner

 

 

 

 

 

gitlab git docker 三者的安裝 略。且本篇是以docker鏡像方式部署

 

 上圖為gitlab-ci的過程,其實它只是省略了一些我們的手動發布部署過程,將其自動化,但原來的流程還是一個不能少。所以,我們要進行的第一步,就是手動實現一遍流程。

 

三、手動實現一遍

(gitlab服務器) 創建代碼倉庫---> (開發PC) git clone ---> (開發pc) 修改代碼,添加dockerfile ---> (開發pc) git push ---> (部署服務器) git pull ---> (部署服務器) docker build ,docker run 

1、創建代碼倉庫

 在創建之前,需要在使用git的機器上設置好ssh,可以參考之前的https://www.cnblogs.com/hallejuayahaha/p/11996332.html

要注意的是,在部署機器上,gitlab-runner安裝好后,需要添加一個gitlab-runner的用戶,需要添加這個用的ssh,因為在ci自動化后,在部署服務器上的操作都是由這個用戶來做的,所以不僅要添加它的ssh,也要docker 免去sudo的指令。

總之就是讓gitlab-runner用戶,在做部署過程中,不要受到權限的阻礙。

******docker免去敲sudo*******

在安裝完docker之后,也會出現一個docker用戶組,將你要免去敲sudo的用戶添加進去,就可以了

sudo usermod -aG docker gitlab-runner

 

添加代碼倉庫 

 

 並將一個.netcore項目創建進去

  

 添加dockerfile文件,僅需在項目上右鍵,docker支持,vs就可以自動添加。然后git push

這樣開發pc端的代碼就都提交到gitlab服務器上了,

 2、部署端git pull ,docker build , docker run

 

 

 

 

 

 

鏡像已經成功啟動,打開瀏覽器,輸入ip + 暴露出來的端口8090

PS:  .NETCORE web中,startup.cs文件中,有

app.UseHsts();

app.UseHttpsRedirection();

這兩行要注釋掉,不然網站回一直往https跳轉,沒法進入http的80端口

 

 整個手動流程成功。

四、使用gitlab-runner來替代手動部署工作

 

gitlab-runner替代這張圖上第二個箭頭的地方

1、安裝gitlab-runner

 下載二進制文件

sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64

 賦予權限:

sudo chmod +x /usr/local/bin/gitlab-runner

創建gitlabCI用戶:

sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

安裝並作為運行服務:

sudo /usr/local/bin/gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo /usr/local/bin/gitlab-runner start

 

注冊gitlab-runner:

先打開gitlab

 

 記住這個url和token

在部署的服務器上

gitlab-runner register

 

 

 然后回到gitlab 服務器,就可以看到我們的runner已經被發現了

 PS:!!!!!!!!!!!!!!!這里可以看到第一個runner的連接是沒有的,Last contact  is  Nerver

經過排查,我出現這種情況,是因為204這台機器沒有在gitlab中配置ssh,將gitlab-runner用戶的ssh配置到gitlab中,再重啟一下runner

sudo gitlab-runner restart

就好了

 

 

 點進去稍作修改

 

 把這個勾上,它可以使.gitlab-ci.yml在沒有指定tag標簽值時也能運行

 

 

  然后在下面選擇,我們想在這個runner上運行的那個項目

3、編寫.gitlab-ci.yml

 

 

 

 在項目中添加名為.gitlab-ci.yml的文件

variables:
  GIT_STRATEGY: none
stages:
  - test
test_job:
  stage: test
  tags:
    - vv1
  only: 
    - master
  script:
    - cd /home/centos
    - rm -rf /home/centos/testcdci
    - git clone git@192.168.10.202:root/testcdci.git
    - cd ./testcdci/TestCDCI
   
    - docker stop testcdci
    - docker rm testcdci
    - docker rmi testcdci

   
    - docker build -t testcdci .
    - docker run -itd -p 8090:80 --name testcdci --restart always  testcdci  

 

其中的關鍵字可以參考

https://www.szyhf.org/2017/01/16/gitlab-ci-yml%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E%EF%BC%88%E5%AE%98%E6%96%B9%E6%96%87%E6%A1%A3%E7%BF%BB%E8%AF%91%EF%BC%89/

注意

script節點
這個節點下的命令我們應該很熟悉,就是上面我們手動操作所寫的命令
就是這一段,幫助我們完成了手動變自動的。
tags節點,指定了哪一個runner來運行我們的項目
only節點,指定了值部署master分支

注意點2

.gitlab-ci.yml文件,應該放在項目的根目錄中,每次Git push ,gitlab都會檢測到.gitlab-ci.yml,如果檢測到,就按照其腳本進行ci部署

 

 

 

4、開發PC gitpush實現自動化部署

見證奇跡的時刻

git push

 

 

 在項目的cd/ci中可以看到命令詳情

 

 我們打開對象應網站看看

 

 已經出現了

現在改一下代碼

 

 重提交一次Git push

 

 

 

 

Amazing!!!!!!!!!!!!!!!


免責聲明!

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



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