Asp.net Core Jenkins Docker實(shí)現(xiàn)一鍵化部署的實(shí)現(xiàn)
寫在前面
在前段時間嘗試過用Jenkins來進(jìn)行asp.net core 程序在IIS上面的自動部署。大概的流程是Jenkins從git上獲取代碼
最開始Jenkins是放在Ubuntu的Docker中,但是由于Powershell執(zhí)行的原因,就把Jenkins搬到了windows上。因?yàn)槲覀兙W(wǎng)站的部署需要停掉IIS站點(diǎn),所以需要Powershell來遠(yuǎn)程操作服務(wù)器(上傳文件,停止站點(diǎn),啟動站點(diǎn)),也很順利的利用WinRM+Powershell腳本實(shí)現(xiàn)了上面的功能,但是最后在實(shí)際使用中發(fā)現(xiàn),腳本停止站點(diǎn)偶爾會有是假狀態(tài),進(jìn)行Copy文件還總是會因?yàn)檎加枚?,所以還是只能手動去停止站點(diǎn),這樣就沒有達(dá)到一鍵化的目的,所以就有了用Docker來鏡像。
Docker Image
.net core對Docker是大力支持了,在Core之前,我就特別羨慕我在Docker中使用一些工具的體驗(yàn)--一行指令就可以工具自動安全完整了,不用費(fèi)力進(jìn)行環(huán)境配置,而且對系統(tǒng)的入侵特別少。所以Core出來之后,我就一直會嘗試在Docker中運(yùn)行Core程序 但是一直沒敢上正式環(huán)境,正好現(xiàn)在遇到自動化部署的問題,就打算先從測試環(huán)境開始,把Docker環(huán)境一步步的能應(yīng)用到正式環(huán)境上。大概的流程是這樣的:
Jenkins安裝
Docker安裝Jenkins可以直接到store.docker.com上搜索Jenkins的鏡像然后run容器就行了唯一要注意的是要讓容器中的Jenkins共用宿主機(jī)的Docker環(huán)境,命令如下
后面的-v是用來指定宿主機(jī)的文件/文件夾掛載到宿主機(jī)的指定路徑上面,這里主要是用來掛載宿主機(jī)的Docker環(huán)境。當(dāng)容器啟動完成之后,我們可以用命令
docker exec -it containerid /bin/bash
進(jìn)入容器中,執(zhí)行docker ps的命令試試是否能執(zhí)行成功。
Jenkins Job
當(dāng)容器運(yùn)行好之后,進(jìn)行一些初始化的工作之后,我們就可以開始建立的部署Job了
源代碼管理中配置我們Git的地址
然后就是構(gòu)建命令直接用執(zhí)行Shell
#!/bin/bash # 獲取短版本號來用Image的版本號 GITHASH=`git rev-parse --short HEAD` docker build -t {imagename}:$GITHASH -f {DockerFile-PWD} {鏡像的初始目錄}
這里就是在構(gòu)建我們的Image了
然后接下來就是推送當(dāng)前構(gòu)建的Image到遠(yuǎn)程倉庫,再在構(gòu)建后去執(zhí)行遠(yuǎn)程連接到需要發(fā)布的服務(wù)器根據(jù)版本號獲取到需要部署的鏡像進(jìn)行run就行,因?yàn)槲耶?dāng)前都在測試環(huán)境 所以就直接在本地執(zhí)行鏡像的run了。
docker stop {containername} #停掉原來的容器 docker rm {containername} #刪除原來 docker run -p 9526:80 -d -e ASPNETCORE_ENVIRONMENT='Development' -v /Path/Path/Logs:/app/App_Data/Logs --restart always --name {containername} {imagename}:$GITHASH
這樣就基本實(shí)現(xiàn)了一鍵化部署了,當(dāng)然還是有很多需要優(yōu)化的地方,接下來我在使用的過程中如果遇到用著不順的或者是你們有不順的地方我們在來解決下。
寫在最后
DockerFile
最開始構(gòu)建asp.net core 2.1版本的鏡像的時候,運(yùn)行總是會找不到dotnet sdk,最后就只有在DockerFile中添加了一層 文件內(nèi)容如下
FROM microsoft/dotnet:2.1-sdk AS build WORKDIR /app # 拷貝所有文件到環(huán)境中,并進(jìn)行restore,build and release COPY . . RUN dotnet restore RUN dotnet build WORKDIR /app/src/Path RUN dotnet publish -c Release -o out FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime WORKDIR /app COPY --from=build /app/src/Path/out ./ 把發(fā)布好的文件拷貝到鏡像中 Copy --from=build /app/src/Path/bin/Debug/netcoreapp2.1/XXX.xml ./ #把Swagger使用的xml拷貝到目錄中 EXPOSE 80 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #時區(qū)的本地化 RUN echo 'Asia/Shanghai' >/etc/timezone ENTRYPOINT ["dotnet", "project.dll"] # 啟動程序
這種方式有個問題就是會有一些無用的images 分享的指令來進(jìn)行清除
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop #停掉狀態(tài)為Exited的容器 docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm #刪除狀態(tài)為Exited的容器 docker images|grep none|awk '{print $3 }'|xargs docker rmi # 刪除tag為none的鏡像 docker rmi $(docker images | grep imagename | awk '{print $3}') #刪除鏡像名稱為imagename的鏡像 (只能針對沒有被用的Image)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在DataTable中執(zhí)行Select("條件")后,返回DataTable的方法
在DataTable中執(zhí)行Select("條件")后,返回DataTable的方法...2007-09-09ASP.NET Core學(xué)習(xí)之使用JWT認(rèn)證授權(quán)詳解
這篇文章主要給大家介紹了關(guān)于ASP.NET Core學(xué)習(xí)之使用JWT認(rèn)證授權(quán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08IIS Express 取代 ASP.NET Development
這篇文章主要介紹了IIS Express 取代 ASP.NET Development Server的配置方法,需要的朋友可以參考下2023-06-06MVC4制作網(wǎng)站教程第三章 添加用戶組操作3.2
這篇文章主要為大家詳細(xì)介紹了MVC4制作網(wǎng)站教程,添加用戶組功能的實(shí)現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08.net 應(yīng)對網(wǎng)站訪問壓力的方案總結(jié)
本文將總結(jié)下一些應(yīng)對網(wǎng)站訪問壓力的技術(shù)方案。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02.net?core中高效的動態(tài)內(nèi)存管理方案
這篇文章介紹了.net?core中高效的動態(tài)內(nèi)存管理方案,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07