一、前言
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
其中的關鍵字可以參考
注意
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!!!!!!!!!!!!!!!