項目進行微服化改造后系統發布就變得愈為重要,因為持續集成導致部署變得越來越頻繁,人工部署帶來的一些問題日漸凸顯,大家可能都有被系統部署線問題困擾過的經歷。
本篇我們將會使用Jenkins+Gitlab來實現程序的持續集成和自動化發布。
1.新建項目提交到GitLab
首先需要有一個GitLab倉庫,這個注冊一下就可以,具體流程就不寫了。
通過GitLab新建一個項目(Project):(沒有的話可以使用我這個來測試:https://git.lug.ustc.edu.cn/DeepmountainMoose/apitest.git)
拉取一下項目,添加一個.Net Core的測試Web項目WebTest,什么都不需要添加和修改,然后提交到GitLab,結構如下:
2.安裝並運行Jenkins
這里用的是阿里雲Centos7,前提是需要安裝好java的jdk 1.8+,至於怎么安裝大家可以百度(之前好像也寫過,再ELK那篇):
Jenkins官網最新穩定版: https://pkg.jenkins.io/redhat-stable/
windows下載:https://jenkins.io/download/
(1)下載
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
(2)導入秘鑰
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
(3)安裝
yum install jenkins
(4)配置端口
Jenkins的默認端口是8080,如果要修改的話使用以下命令,我這里修改為8070:
vim /etc/sysconfig/jenkins
jenkins_port:8070
(5)啟動Jenkins
nohup java -jar /usr/lib/jenkins/jenkins.war --httpPort=8070 &
然后通過瀏覽器IP:Port查看Jenkins界面進行配置,首先需要輸入系統自動生產的密碼:
復制圖片上的路徑,輸入命令: cat 圖片上的路徑,如:cat /var/lib/jenkins/secrets/initialAdminPassword,復制密碼粘貼確認就可以,之后進入Jenkins選擇插件界面:
我這邊選擇默認的安裝推薦插件,確認后進入jenkins加載頁面,等待自動加載完成。
3.安裝.Net Core SDK 2.1
到這里Jenkins的安裝就算完成了,我們等會再進行配置,因為要運行Net Core程序,所以需要安裝.Net Core SDK 2.1,如果已經安裝了的可以跳過。
(1)安裝rpm包
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
(2)更新軟件包
sudo yum -y update
(3)安裝SDK
sudo yum -y install dotnet-sdk-2.1
(4)校驗是否安裝成功
dotnet --version
4.配置Jenkins
(1)新建一個自由風格的軟件項目
(2)填寫源代碼Git地址,用於Jenkins拉取代碼:
構建觸發器,15分鍾拉取一次,設置的語法可以點擊右邊的符號查看:
然后對構建環節進行設置:
添加構建環節,執行.Ne Core的發布腳本:
dotnet restore
dotnet build
dotnet publish
到這里Jenkins的配置就算完成了,可以點擊立即構建進行查看:
構建成功,點擊藍色按鈕查看詳細的構建日志:
這個時候程序還沒有運行,只是構建了發布好的程序文件,我們需要復制標記出來的發布文件地址,然后手動運行,分別就是下面標記的兩個命令:
成功運行之后看到網站在5000端口,但是這個時候訪問發現無法成功,這是因為我們還沒有做端口映射,我們需要安裝下Nginx。
5.安裝Nginx
curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
rpm -ivh nginx.rpm
yum install nginx
輸入:systemctl start nginx 來啟動nginx。
輸入:systemctl enable nginx 來設置nginx的開機啟動(linux宕機、重啟會自動運行nginx不需要連上去輸入命令)。
這個時候我們訪問服務器IP就會看到Nginx的默認頁:
然后我們需要配置Nginx的文件將5000端口映射到80端口,以便通過IP訪問我們的Net Core網站:
使用命令:vim /etc/nginx/conf.d/default.conf,添加 proxy_pass http://localhost:5000;
OK,配置修改完成,我們需要重啟Nginx讓它生效:sudo service nginx restart
然后這個時候訪問服務器IP就可以看到網站正常運行了:
到這里我們已經成功了一半,這個時候需要檢驗一下自動發布是不是真的有效,修改項目,新增一個試圖頁:JenkinsTest
然后提交到Git,再一次通過Jenkins進行構建發布,成功之后手動運行下網站,然后訪問一下我們新添加的JenkinsTest頁面:
成功了,這表明我們已經可以通過這個來實現.NET Core程序的自動化構建發布了!!
Windos下我們需要發布到IIS部署,只需要更改下執行腳本,選擇Windows下批處理命令:
cd "%WORKSPACE%\NetCoreWebTest"
dotnet restore
dotnet build
dotnet publish -o D:\PublishFile\JenkinsPublish
%WORKSPACE%是Jenkins的環境變量就是工作文件區域,既我們新建的工程名,下面意思是將項目發布到指定的IIS文件夾下。
構建后查看IIS發布也成功了。
但是,我們還需要進一步修改,主要是以下兩個方面:
1.工作中用於.Net Core部署的通常是多台IIS,而且要支持回滾和包括金絲雀發布在內的多種發布模式。
2.基於k8s的容器化部署越來越被各大企業接受,所以,我們需要考慮如果構建容器化的自動發布流程
之后會對朝着這兩個方向來進一步的修改。