如何利用Jenkins+TFS為.NetCore實現(xiàn)持續(xù)集成/部署詳解

前言

創(chuàng)新互聯(lián)建站服務項目包括格爾木網站建設、格爾木網站制作、格爾木網頁制作以及格爾木網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,格爾木網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到格爾木省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

在前后端分離開發(fā)的項目當中為了避免重復構建發(fā)布,我們需要部署一個持續(xù)發(fā)布環(huán)境,而目前的開發(fā)環(huán)境服務器都是基于 CentOS 的,因此每次在本地發(fā)布之后還需要打包,上傳,部署,十分繁瑣。故這里采用了比較成熟的Jenkins 作為持續(xù)部署環(huán)境。

為了方便安裝,我們這里使用了 Docker 來進行安裝,至于 Docker 安裝的步驟這里不在贅述,詳情可以參考這一篇博文。

上面安裝的是一個較老的版本,這里推薦參考Docker 官方文檔來進行安裝。

安裝好 Docker 之后,拉取 Jenkins 的官方鏡像。執(zhí)行如下命令:

docker pull jenkins/jenkins

拉取完畢之后我們基于這個鏡像封裝一個新的鏡像出來,可能會問為什么不能直接使用呢?因為這兒的 jenkins鏡像并不包含 docker 環(huán)境,所以我們需要封裝一個新的鏡像讓其能夠訪問宿主機的 Docker 程序。

構建 Dockerfile 內容如下:

FROM jenkins/jenkins:latest
USER root
#清除了基礎鏡像設置的源,切換成阿里云的源
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
 && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
 && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
 && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源并安裝缺少的包
RUN apt-get update && apt-get install -y libltdl7
ARG dockerGid=999

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group \
USER jenkins

完成之后執(zhí)行如下命令構建新的 Docker 鏡像:

docker build -t docker/jenkins .

下面我們就開始運行我們的 Jenkins 容器了:

docker run -d -p 8080:8080 -p 50000:50000 \
 --name=jenkins -v /root/docker/jenkins:/var/jenkins_home \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -v $(which docker):/usr/bin/docker \
 docker/jenkins

這里我們將 Jenkins 鏡像里面的 /var/jenkins_home 映射到了宿主機的 /root/docker/jenkins 文件夾,在這個文件夾里面都存放的是 Jenkins 的一些配置項等。

注意,這里可能會出現(xiàn)如下錯誤:

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log': Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

這是因為在 docker 內部的 jenkins user 用戶沒有權限,因為映射的 /root/docker/jenkins/ 文件夾屬于root 用戶的,而 jenkins user 的 uid 為 1000,執(zhí)行如下命令:

sudo chown -R 1000:1000 /home/docker/jenkins

之后再次運行 Jenkins 的容器,訪問 http://服務器IP:8080/ 站點,會提示你輸入密鑰:

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

我們來到宿主機執(zhí)行以下 shell 命令:

docker container logs jenkins

就可以看到密鑰其實已經輸出在終端了,復制過來,粘貼進去就可以了。之后就是選擇你需要安裝的插件,選擇第一個默認即可,可能這里因為網絡原因會安裝失敗,可以多重試幾次,或者直接忽略掉,后面我們會將如何解決。

安裝完成之后輸入用戶名密碼,就可以開始使用了,可能你剛才會因為網絡等原因造成插件安裝失敗,這里我們來到

Jenkins>>系統(tǒng)管理>>管理插件>>高級

然后將 升級站點 地址改為 http://mirror.xmission.com/jenkins/updates/current/update-center.json。之后安裝之前缺失的插件。

這里我們項目使用的是 TFS 進行源代碼管理,所以我們需要安裝 TFS 插件,在 Manage Jenkins 的 Manage Plugin 里面我們找到 Team Foundation Server Plug-in 插件,勾選,點擊 Download now and install after restart 按鈕,勾選 Restart Jenkins when installation is complete and no jobs are running 。

安裝完成之后 Jenkins 會重啟,等待重啟完畢之后,來到 Jenkins>>Manage Jenkins>>Configure System 查看 TFS/Team Services 然后添加你的 TFS Collection。

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

保存之后我們就可以新建項目了。

首先,我們來到首頁,選擇 New Item:

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

然后選擇自由風格項目,填上名稱.

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

在 Source Code Management 上選擇 TFS,并且填入你的 TFS 服務器地址,項目路徑,與你的賬號密碼:

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

然后你就可以嘗試構建一下,構建成功之后就會在 Workspace 看到你的項目文件被拉下來了。

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

那么我們的代碼如何構建并且部署呢?因為我們之前在 Jenkins 的 Docker 鏡像啟動的時候掛載了宿主機的 Docker 程序,我們現(xiàn)在就可以直接基于微軟的 dotnetcore 鏡像來構建我們的項目。所以,我們先拉取微軟的 dotnetcore 鏡像,運行如下命令:

docker pull microsoft/dotnet:latest

拉取鏡像之后,我們來編寫一個 Dockerfile 文件來讓 Jenkins 來執(zhí)行 Shell 構建。

如果你還不知道如何編寫 Dockerfile 文件,可以參考 這篇文章。

FROM microsoft/dotnet:latest
WORKDIR /app
COPY ./ .
ENV ASPNETCORE_URLS http://+:5000
EXPOSE 5000

RUN cd ./HKERP.IdentityServer.Host \
 && dotnet restore \
 && dotnet build

WORKDIR /app/HKERP.IdentityServer.Host
ENTRYPOINT ["dotnet","run"]

然后將這個 Dockerfile 放在你的項目里面,類似于這樣:

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

然后我們再回到剛才 Jenkins 里面,配置剛才項目,新建一個 Shell Step,就像這樣:

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

代碼如下:

#!/bin/sh
cd /var/jenkins_home/workspace/API_IdentityServer
docker container prune << EOF
y
EOF
docker container ls -a | grep "api_identityserver"
if [ $? -eq 0 ];then
 docker container stop api_identityserver
 docker container rm api_identityserver
fi
docker image prune << EOF
y
EOF
docker build -t api_identityserver .
docker run -d -p 8083:5000 --name=api_identityserver api_identityserver

步驟就是首先清理掉 docker 處于終止狀態(tài)的容器,然后判斷有沒有叫 api_identityserver 的容器在運行,如果有就直接停掉,然后清除所有的虛懸鏡像,使用當前目錄的 dockerfile 構建一個新的 api_identityserver 鏡像,使用 api_identityserver 鏡像運行一個新的容器。

這兒我安裝了 Jenkins 的一個 Blue Ocean 插件,來看一下:

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

運行一下:

如何利用Jenkins + TFS為.Net Core實現(xiàn)持續(xù)集成/部署詳解

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對創(chuàng)新互聯(lián)的支持。

當前文章:如何利用Jenkins+TFS為.NetCore實現(xiàn)持續(xù)集成/部署詳解
網頁網址:http://muchs.cn/article18/gppcgp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT全網營銷推廣、服務器托管、靜態(tài)網站、網站營銷、定制開發(fā)

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網站