項目進行微服化改造後系統發佈就變得愈爲重要,由於持續集成致使部署變得愈來愈頻繁,人工部署帶來的一些問題日漸凸顯,你們可能都有被系統部署線問題困擾過的經歷。java
本篇咱們將會使用Jenkins+Gitlab來實現程序的持續集成和自動化發佈。linux
1.新建項目提交到GitLabnginx
首先須要有一個GitLab倉庫,這個註冊一下就能夠,具體流程就不寫了。git
經過GitLab新建一個項目(Project):(沒有的話可使用我這個來測試:https://git.lug.ustc.edu.cn/DeepmountainMoose/apitest.git)vim
拉取一下項目,添加一個.Net Core的測試Web項目WebTest,什麼都不須要添加和修改,而後提交到GitLab,結構以下:windows
2.安裝並運行Jenkinscentos
這裏用的是阿里雲Centos7,前提是須要安裝好java的jdk 1.8+,至於怎麼安裝你們能夠百度(以前好像也寫過,再ELK那篇):api
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的容器化部署愈來愈被各大企業接受,因此,咱們須要考慮若是構建容器化的自動發佈流程
以後會對朝着這兩個方向來進一步的修改。