當前位置:
首頁 > 最新 > 自動化的威力,web項目從github一鍵部署

自動化的威力,web項目從github一鍵部署

來源:https://www.cnblogs.com/7tiny/p/9119638.html

【前言】

DevOps方面的文章很早之前就想分享了,擠出一點時間把前段時間搭建的一些提高開發效率的東西給大家分享一下吧。

本文介紹了一個.netcore mvc web項目,從項目push到github開始

自動從github上拉取代碼

編譯,生成,發布

停止docker容器,刪除docker鏡像

通過項目的dockerfile新建docker鏡像

Run容器,自動綁定ip,站點啟動

整個過程只需要在jenkins這個自動化工具上點一個按鈕。下面我們按順序來簡單介紹一下。

使用的內容都很基礎,重要的是一切自動化的思維,我們要提高我們的開發效率,減少在開發階段上浪費的不必要的時間。

一、jenkins的安裝/部署

這個放在單獨章節講解,這裡先佔個地方,以後放個鏈接(*^_^*),大家可以先參考我之前參考的一篇博文 https://segmentfault.com/a/1190000007086764

其實jenkins配置時候的坑比較多,簡單介紹幾個,或許大家碰上了,可以直接問我。

構造的時候提示沒許可權,permission問題

二、從Github上拉取代碼執行命令的配置


git的插件其實在jenkins安裝過程中的推薦插件提示中有,如果直接安裝了推薦的插件,那麼無需再去安裝。

如果沒有安裝推薦插件,那麼可以進入jenkins的系統管理

管理插件

安裝git相關的插件

這個應該很簡單,不再贅述。

我們打開一個項目(沒有請新建),然後進入項目配置:

輸入項目的git地址,我這裡寫的是github的一個項目地址,地址可以直接打開github複製:

該項填寫的是項目的瀏覽地址,直接從瀏覽器地址欄複製

然後寫在這個位置

還支持選擇分支進行構建

這個功能默認是沒有的,需要安裝一個插件,名稱叫Git Parameter插件安裝的方法之前已經介紹過了,一致的。安裝好這個插件以後,就可以自由地配置參數化構建過程。

源碼管理繼續填寫git地址,直接從github複製項目地址

然後填寫在對應位置

核心內容當然是構建時執行的命令了,我們下一節進行構建命令的詳細剖析

2、創建一段jenkins構建命令(從shell腳本說起)

我們繼續講解我們的構建命令環節,jenkins的工作流程都是從一行行的命令來實現的,因此,我們給jenkins發出一系列的命令,jenkins會在後台默默按順序一一執行,因此,jenkins的功能強大與否,決定權在於我們的腳本命令是否全面和強大。

我們從新建一個shell腳本開始說起。

jenkins是可以直接執行shell命令的,我們可以在構建的命令文本區域填寫對應的腳本命令,如下圖所示:

為什麼我們要調用shell腳本執行,而不直接將所有命令寫在這裡?

答案一定是:為了重用,便於修改維護!試想,如果我們的十個構建項目都使用了同樣的構建編譯發布nuget到nuget伺服器的命令,我們要分別在十個構建項目中分別寫一堆的命令嗎,有一天我們需要修改一下nuget伺服器的推送密鑰,我們需要分別打開不同的構建項目去修改命令參數。在項目很多的情況下會相當複雜。

作為對比,我們在新增加構建項目的時候,只需要從歷史項目複製,然後修改一下解決方案的名稱即可。

我們把命令添加行號進行逐一講解

命令第1/2/3/4/5行都是生命一個變數,後面跟的是變數的值。$ 的寫法是取變數的值

變數的作用都有注釋說明,其中2是docker的容器名稱

命令第6行的作用是執行這個相對目錄下的一個 DotNetCoreWebPublishToDockerCommon.sh 的shell腳本,並將後面一一獲取到的變數作為參數傳遞到shell腳本裡面。

三、編譯發布的命令講解

我們上一節講解了調用了一個目錄下的shell腳本,那麼我們這節就開始剖析這主要的腳本內容(構建過程分解),文章最後我們會將腳本全部放出來。

1、shell腳本的變數讀取

首先我們腳本的開頭便讀取了上文傳遞進來的參數,然後定義了新的變數存他們的值。

讀取參數使用 $變數順序號 的方式進行讀取,這裡一定要注意順序的正確性。

2、定義好存放發布好的項目代碼的目錄和備份發布內容的目錄

定義好目錄,我們使用 echo 命令輸出構建開始的提示信息。

每次使用的都是同一個目錄,構建之前先使用 rm -rf 命令清空發布目錄(刪除所有文件)

3、publish發布項目到準備好的目錄

該條命令的作用是,使用.netcore自帶的 publish 命令,發布 $/workspace/$/$ 目錄(拼接的.csproj項目路徑)下的項目代碼到 -o 的這個目錄,當然這個目錄是我們上面準備好存儲的目錄,按照項目名稱放在對應的文件夾下。

/p:Version=1.0.$ 的命令作用是構建出來的版本號,按照jenkins的任務序列號(BUILD_NUMBER)走。不然得每次修改項目的信息,很麻煩。

這個序列號就是構建時候自動生成的序列號

4、複製需要的配置到發布目錄

為什麼要有這個操作呢?

為了項目的一些配置安全,比如連接字元串地址,伺服器地址等敏感信息,如果都放在了github上,豈不是要被有心之人瞎搞。

因此,我們自己將敏感信息配置文件放在一個特定的目錄,構建的時候自動複製替換項目裡面的配置文件。

一切為了伺服器的安全!

四、Docker容器命令詳解


docker命令我就不說了吧,有注釋。

2、通過Dockerfile創建鏡像,並映射埠Run容器

通過 $ $/$/. 目錄(這個目錄是git拉取下來的項目目錄,稍後我們講解dockerfile)下的dockerfile 文件構建容器。

構建好的容器按照我們的參數進行命名。

使用 docker run 命令運行容器,並映射容器的80埠到我們參數指定的linux伺服器埠。

列印發布成功的消息。

3、dockerfile的說明

上一點我們使用dockerfile構建了新的鏡像,我們的dockerfile其實是隨著解決方案一起存放著的。

Dockerfile 其實很簡單,在VS2017新建.netcore項目的時候,可以直接附帶著自動建出來,如果沒有,我們可以手動去創建。

裡面其實很簡單,僅僅幾行代碼。

1.描述了從微軟的最新版的官方docker鏡像作為基礎創建新鏡像(不清楚的了解一下docker的鏡像機制)

2.沒啥好說的

3.指定了工作目錄,我們構建完畢後,會自動生成/publish文件夾

4.對外暴露80埠

5.複製文件到鏡像內(必須的配置),會從/pulish目錄複製項目代碼到鏡像中

6.相關項目的入口點程序集

五、生成前的準備工作

怎麼,這就要急著去點那個小按鈕了嗎?

如果你還很冷靜的話,應該還明白很多坑還沒填呢。

1、docker環境的準備

docker的安裝是極其簡單的,只需要簡單的幾行命令即可配置完成,這也是很多人喜愛docker的原因,無需複雜的各種軟體運行環境的安裝,即可簡單搭建好一個程序應有的運行環境(前人都做好,而且不會出現看著別人的教程都會出各種問題的問題)。

$ #安裝Docker$ yum install docker$ #啟動docker服務$ systemctl start docker.service$ #配置開機啟動$ systemctl enable docker.service

centos7安裝docker的命令,非本文重點,如遇到問題,可以自行查找資料解決。

2、微軟官方鏡像 docker.io/microsoft/aspnetcore:latest 的準備

docker pull microsoft/aspnetcore 命令,會自動拉取最新的.netcore鏡像,也就是本文使用的鏡像。太慢可以自行查找配置加速器的方法。我沒有配,沒覺得有多慢。

成功後,使用docker images命令查看拉取的鏡像。大概300多MB大小。

3、.net core環境的準備

如果沒有.netcore環境(可能涉及環境變數的配置),那麼shell腳本中的dotnet命令將無從談起。

直接進微軟官方的說明文檔,很明確地講解了.netcore環境的安裝,當然牆外訪問比較慢,如果不能流暢打開,那麼只能聽在下一面之詞了。?

官方鏈接在此:https://www.microsoft.com/net/learn/get-started/windows

左側選擇Linux

選擇環境為Centos

安裝命令:


sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpmsudo yum updatesudo yum install dotnet-sdk-2.0

如果安裝並配置成功,直接輸入dotnet可以出現提示信息

六、盡情構建吧


點擊構建,選擇分支(如果沒有配置分支管理工具,跳過),開始構建

1、查看構建詳情

我們可以在控制台輸出查看我們的構建過程

拉取代碼並Restore依賴包

刪除鏡像,重新構建鏡像

從微軟官方鏡像,複製項目文件創建新鏡像

運行容器

成功!

七、可能遇到的問題


八、鳴謝

很感謝一群渴望知識的人一直讓我有動力去完成一篇篇對大家有所幫助的稱之為有用的博文。

感謝自己能一路在推動自動化工具的道路上前行

很感謝自己又節約了一大筆時間(多活了幾年)

九、附件


FROM docker.io/microsoft/aspnetcore:latestARG sourceWORKDIR/publishEXPOSE80COPY/. /publishENTRYPOINT ["dotnet","SevenTiny.Cloud.MultiTenantPlatform.Web.dll"]2.DotNetCoreWebPublishToDockerCommon.sh Shell腳本

#要構建的解決方案名稱solutionName=$1#.sln文件全路徑solutionDir=$2#.csproj文件全路徑csprojDir=$3#docker run的容器名稱containerName=$4#制定run的埠port=$5#項目發布的目錄webDir=/vdb1/jenkins/publish/webapp#歸檔目錄archivesDir=/vdb1/jenkins/publish/archivesecho"7tiny:dotnet publish"#清空文件夾rm-rf $/$/*

#發布網站到webDirdotnet publish $/workspace/$/$ -c Release -o $/$ /p:Version=1.0.$#複製配置文件cp -rf /vdb1/jenkins/DotNetCoreWebPublishToDockerCommonConfigs/* $/$/#停止docker容器docker stop $#刪除當前容器docker rm $#刪除鏡像docker rmi $#通過Dockerfile重新構建鏡像docker build -t $ $/$/.#docker run容器並綁定到埠docker run -d -p $:80 --name $ $echo "7tiny:success!"

-END-

看完本文的你是否有所收穫?

請轉發給更多人關注

【猿學圈】

提升IT技能~

學海無涯,別擔心,有我陪著你~

? 點個贊,讓我在心裡記住你


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 全球大搜羅 的精彩文章:

棗陽惠孜賢——百善孝為先 有愛家更興
鄂西的世外桃源

TAG:全球大搜羅 |