日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker最全教程之使用TeamCity来完成内部CI、CD流程(十七)

發布時間:2023/12/4 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker最全教程之使用TeamCity来完成内部CI、CD流程(十七) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇教程主要講解基于容器服務搭建TeamCity服務,并且完成內部項目的CI流程配置。教程中也分享了一個簡單的CI、CD流程,僅作探討。不過由于篇幅有限,完整的DevOps,我們后續獨立探討。??

為了降低容器的使用門檻以及便于大家將容器技術應用于開發和實踐,當前教程大部分線上實踐結合TKE(騰訊云容器服務)來進行講解和實踐。當本系列內容講解完成后,筆者將再單獨講解Kubernetes(k8s)。

最后,長沙技術社區第一次線下交流會將在2019年3月10日下午2點開始,有興趣的朋友可以參與交流。名額有限,詳見《長沙.NET技術社區活動通知》。



目錄??


  • 使用TeamCity來完成內部CI、CD流程1

  • 一個簡單的CI、CD流程1

  • 關于TeamCity2

  • 官方鏡像4

  • 使用騰訊云容器服務(TKV)搭建和托管TeamCity4

  • 創建TeamCity Server容器服務4

  • 創建Teamcity Agent代理服務7

  • 連接和配置Agent9

  • 創建項目以及配置CI10



使用TeamCity來完成內部CI、CD流程?

?


本篇教程主要講解基于容器服務搭建TeamCity服務,并且完成內部項目的CI流程配置。至于完整的DevOps,我們后續獨立探討。



一個簡單的CI、CD流程

??

以下分享一個簡單的CI、CD流程(僅供參考):


?


注意

本流程需要使用git進行代碼版本管理,推薦使用TFS搭建自己的代碼版本庫。自動部署推薦使用騰訊云鏡像觸發器實現,此步驟也可以使用腳本實現,如果是普通的.NET代碼,推薦編寫webdeploy命令腳本來完成自動部署。通知推薦大家使用釘釘機器人。


本流程僅作參考,后續筆者會獨立一篇來講解整個DevOps流程,以及項目(產品)渠道消息集成這塊,這里僅作拋磚引玉,同時大家也可以更易于理解,容器技術大大簡化CI、CD流程!



關于TeamCity


TeamCity是一款成熟的CI服務器,來自JetBrains公司。JetBrains已經在軟件開發世界中建立了權威,他們的工具如WebStorm和ReSharper正被全球的開發者所使用。

TeamCity在它的免費版本中提供了所有功能,但僅限于20個配置和3個構建代理。額外的構建代理和構建配置需要購買,你可以在這里找到價格。

TeamCity安裝后即可使用,可以在多種不同的平臺上工作,并支持各種各樣的工具和框架。 能夠支持JetBrains和第三方公司開發的公開的插件。盡管是基于Java的解決方案,TeamCity在眾多的持續集成工具中提供了最好的.NET支持。TeamCity也有多種企業軟件包,可以按所需代理的數量進行擴展。

TeamCity分為專業版和企業版,專業版免費,支持100個構建配置,允許完全訪問產品的所有功能,足夠小團隊小公司來完成自己的CI流程的構建了。


?

下載地址:

https://www.jetbrains.com/teamcity/download/#section=section-get


TeamCity可以通過執行文件安裝,也可以在Docker容器中運行。本篇教程主要講解通過騰訊云容器服務(TKV)來搭建和托管TeamCity環境。


?


官方鏡像?

?

官方鏡像地址:

https://hub.docker.com/r/jetbrains/teamcity-server

如果小伙伴們需要在本地測試,也可以使用以下命令在本地運行:

docker run -it --name teamcity-server-instance ?\

????-v <path to data directory>:/data/teamcity_server/datadir \

????-v <path to logs directory>:/opt/teamcity/logs ?\

????-p <port on host>:8111 \

jetbrains/teamcity-server

?

此命令需要映射對應的數據目錄和日志目錄以及端口。鏡像名稱為jetbrains/teamcity-server。

在本地運行,我們主要用于學習和測試,接下來我們還是回到主題,繼續搭建線上的TeamCity服務。


使用騰訊云容器服務(TKE)搭建和托管TeamCity??


創建TeamCity Server容器服務

TKE創建服務的部分細節在之前的教程中我們講述過,這里主要講解一些主要的點。由于TeamCity這邊需要使用到數據卷做持久化,那么在TKE中,我們如果實現容器服務的持久化呢?

騰訊云容器服務是基于?Kubernetes 編排系統搭建的,創建服務時可以設置以下類型的數據卷:

·?本地硬盤:將容器所在宿主機的文件目錄掛載到容器的指定路徑中(對應Kubernetes的HostPath), 也可以不填寫源路徑(對應Kubernetes的EmptyDir),不填寫時將分配主機的臨時目錄掛載到容器的掛載點,指定源路徑的本地硬盤數據卷適用于將數據持久化存儲到容器所在宿主機,EmptyDir適用于容器的臨時存儲。

·?云硬盤:騰訊云基于CBS擴展的Kubernetes的塊存儲插件。可以指定一塊騰訊云的 CBS 云硬盤掛載到容器的某一路徑下,容器的遷移,云硬盤會跟隨遷移,使用云硬盤數據卷適用于數據的持久化保存,可用于Mysql等有狀態服務,設置云硬盤數據卷的服務,實例數量最大為 1。

·?NFS盤:可以使用騰訊云的文件存儲CFS, 也可使用自建的文件存儲NFS, 只需要填寫NFS路徑,使用NFS數據卷適用于多讀多寫的持久化存儲,適用于大數據分析、媒體處理、內容管理等場景。

·?配置項:將配置項中指定 key 映射到容器中(key作為文件名),使用配置項數據卷主要用于業務配置文件的掛載,可以用于掛載配置文件到指定容器目錄。

?

使用數據卷時有以下注意事項:

1.創建數據卷后需要設置容器的掛載點。

2.同一個服務下數據卷的名稱和容器設置的掛載點不能重復。

3.本地硬盤數據卷源路徑為空時,系統分配臨時目錄在

/var/lib/kubelet/pods/pod_name/volumes/kubernetes.io~empty-dir.?

使用臨時的數據卷的生命周期與實例的生命周期保持一致。

4.數據卷掛載需要設置權限,默認設置為讀寫權限。

了解了這些,接下來的實踐我們使用本地硬盤和云硬盤來實現我們云端的數據持久化。

創建TeamCity?Server容器服務主要分為以下幾個步驟:

1.?創建服務,設置鏡像

鏡像名稱為:jetbrains/teamcity-server,如下圖所示(注意是直接輸入):


2.?配置數據卷。

數據卷我們這里選擇云硬盤,其中“vol”為硬盤命名:

這里我們需要在云硬盤控制臺添加好相應的云硬盤:


3.?添加掛載點,以保存數據和日志內容,如下圖所示:

其中“vol”為剛創建的數據卷名稱,中間部分為容器內的路徑,右側部分為設置該路徑的權限。


4.?配置端口映射

TeamCity Server的默認端口為8111,我們可以這么來配置:

?

如果我們需要將8111映射為80端口,我們可以這么配置:


5.?點擊【創建服務】按鈕,創建服務

創建完成后,可以在服務列表看到我們所創建的服務:


注意

至此,TeamCity Server服務創建完成。剛才我們在服務訪問方式中選擇了【提供公網訪問】,TKV自動為我們創建了一個負載均衡實例,以提供外網訪問。這時,我們使用IP即可訪問對應的服務。


如剛創建的:

?

創建Teamcity Agent代理服務

Server創建好了,我們還需要創建TeamCity Build?Agent來為我們構建代碼。也就是構建過程還得由專門的構建代理來提供服務。

TeamCity Build Agent官方鏡像地址如下:

https://hub.docker.com/r/jetbrains/teamcity-agent/

我們可以通過以下命令在本地跑起來:

docker run -it -e SERVER_URL="<url to TeamCity server>" ?\

????-v <path to agent config folder>:/data/teamcity_agent/conf ?\ ?????

jetbrains/teamcity-agent

跑起來之后,我們需要在Server的管理中心來連接和授權。


配置特權級容器

值得注意的是,如果我們使用TeamCity的代理來構建Docker容器,那么我們勢必需要使用到主機的Docker守護進程,這時,我們可以使用特權級容器來解決這個問題,如下面命令所示:

docker run -it -e SERVER_URL="<url to TeamCity server>" ?\

????-v <path to agent config folder>:/data/teamcity_agent/conf \

????-v docker_volumes:/var/lib/docker \

????--privileged -e DOCKER_IN_DOCKER=start \ ???

????jetbrains/teamcity-agent

使用privileged參數,容器內的root才擁有真正的root權限,并且Docker將允許訪問主機上的所有設備,甚至允許我們在容器中啟動Docker容器。接下來在騰訊云TKV這邊,我們也需要使用到特權級容器,以便于我們使用TeamCity來構建Docker容器鏡像,以及推送鏡像。


TeamCity Agent基礎鏡像包括

由于在接下來的步驟中需要使用到Agent來構建代碼,因此我們需要知道其包含的內容:

·?ubuntu:bionic(Linux)

·?microsoft / windowsservercore或microsoft / nanoserver(Windows)

·?AdoptOpenJDK 8,JDK 64位

·?git

·?mercurial除了nanoserver鏡像

·?.NET Core SDK(可以構建.NET Core!!)

·?MSBuild工具(基于windowsservercore的鏡像)

·?docker-engine(Linux)


創建Teamcity Agent代理服務

創建TeamCity?Agent容器服務主要分為以下幾個步驟:

1.?創建服務,設置鏡像

鏡像名稱為:jetbrains/teamcity-agent,如下圖所示(注意是直接輸入):


2.?配置數據卷。

數據卷我們這里選擇使用本地硬盤,主要是為了講解數據卷的不同類型:



使用本地硬盤有兩種形式:

·?指定源路徑(HostPath),將容器所在宿主機的文件目錄掛載到容器指定的掛載點中,如容器需要訪問/etc/hosts則可以使用HostPath映射/etc/hosts等場景。

·?空的源路徑(EmptyDir),用于容器的數據的臨時存儲,如基于磁盤的排序場景等。

也就是我們留空也可以。


3.?添加掛載點,以保存數據,如下圖所示:

其中“vol”、“dockervol”為剛創建的數據卷名稱,中間部分為容器內的路徑,右側部分為設置該路徑的權限。


4.?配置環境變量

如下圖所示,我們還需配置以下環境變量:

AGENT_NAME

代理實例名稱(授權時會顯示)

SERVER_URL

服務端UI

DOCKER_IN_DOCKER

Docker內部啟動Docker


5.?配置特權級容器

此選項在TKV容器服務的高級設置中,如圖所示:


6.?配置端口映射

這里我們無需提供公網訪問,因此選擇【僅在集群內訪問】即可。端口映射這塊,Agent的默認端口為9090。


7.?點擊【創建服務】按鈕,創建服務

創建完成后,可以在服務列表看到我們所創建的服務:



連接和配置Agent?


Server和Agent配置完成后,我們可以訪問Server站點,完成初始化工作。然后,我們需要配置好Agent。

打開Agents界面,可以看到我們剛創建的Agent:


這時,我們需要先進行授權,也就是打開【Unauthorized】面板,點擊【Authorize】按鈕:

授權成功后,我們就可以看見已連接的代理了:

?

接下來,才可以開始搞事情。



創建項目以及配置CI??


項目創建界面如下所示:

?

推薦大家使用git來管理自己的代碼。這里我們可以添加我們的代碼倉庫地址,如果是私有庫,還需要配置賬號密碼。簡單步驟我們這里略過,然后接下來TeamCity會掃描源代碼,來提供推薦的構建步驟:?


這里我們可以勾選我們需要的步驟,或者自己來創建符合自己需要的步驟。

注意

使用Docker托管的Agent服務鏡像并不支持PowellShell。如果選擇了不支持的步驟,將無法使用剛才我們創建的Agent執行代碼構建。


這里,我們可以添加幾個簡單的步驟:


步驟1、2使用Docker構建Docker鏡像,相關參考界面如下所示:


步驟3則使用CMD命令發送釘釘消息,以通知團隊:


通知結果如下圖所示:

接下來,我們就可以配置觸發器、失敗條件判斷以及參數等其他配置。整個構建步驟配置起來非常簡單,大家也可以結合我之前的CI教程來完善配置,比如添加對鏡像推送的步驟等。

完成之后,我們就可以嘗試著運行構建,并且查看構建歷史:


整個構建詳情我們也可以直接查看:

?

包括構建日志:

在這個過程中,可能大家需要用到一些構建參數、環境變量等等,我們可以打開對應agent的Agent?Parameters面板來查看詳情:

?

往期文章一覽


Docker最全教程——從理論到實戰(一)

Docker最全教程——從理論到實戰(二)

Docker最全教程——從理論到實戰(三)

Docker最全教程——從理論到實戰(四)

Docker最全教程——從理論到實戰(五)

Docker最全教程——從理論到實戰(六)

Docker最全教程——從理論到實戰(七)

Docker最全教程——從理論到實戰(八)? ??

Docker最全教程——從理論到實戰(九)

Docker最全教程之使用Tencent Hub來完成CI(十)
Docker最全教程——數據庫容器化(十一)
Docker最全教程——數據庫容器化之持久保存數據(十二)
Docker最全教程——MongoDB容器化(十三)
Docker最全教程——Redis容器化以及排行榜實戰(十四)

Docker最全教程之Ubuntu下安裝Docker(十五)

Docker最全教程之樹莓派和Docker(十六)



轉載是一種動力 分享是一種美德

如果喜歡作者的文章,請關注“magiccodes”訂閱號以便第一時間獲得最新內容。本文版權歸作者和湖南心萊信息科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


QQ群:

編程交流群<85318032>?

產品交流群<897857351>


長沙線下技術社區已經創建,有興趣者可以通過客服加群。接下來,我們會定期組織一些線下技術交流分享會,以饗大家。


總結

以上是生活随笔為你收集整理的Docker最全教程之使用TeamCity来完成内部CI、CD流程(十七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。