網(wǎng)站首頁 編程語言 正文
Linux下使用Jenkins自動(dòng)化構(gòu)建.NET?Core應(yīng)用_基礎(chǔ)應(yīng)用
作者:癡者工良 ? 更新時(shí)間: 2022-06-04 編程語言部署 Jenkins
請(qǐng)?zhí)崆霸?Linux 上安裝 Docker,在 Linux 中,我們使用 Docker 啟動(dòng) Jenkins,這樣可以避免手動(dòng)安裝大量依賴以及污染本地環(huán)境,也便于快速啟動(dòng)和故障恢復(fù)。
安裝 Docker 完畢后,使用 docker version
檢查 Docker 版本,Docker 版本不能為 1.x、3.x 這種版本,請(qǐng)升級(jí)到 18.x 以上版本。一般在 Ubuntu 系統(tǒng)中,下載安裝的是最新版本,但是在 Centos 中因?yàn)槟J(rèn)鏡像源中的版本比較舊, 安裝 Doker 版本較低,需要手動(dòng)添加新版本的鏡像源再升級(jí)。
請(qǐng)參考:https://www.jb51.net/article/243104.htm
因?yàn)闀?huì)使用到容器提供環(huán)境,以及使用 Docker 打包 .NET Core 程序?yàn)?Docker 鏡像,所以需要在 Jenkins 容器中映射 Docker 的 .sock
文件,以便在容器中,還能使用 Docker 命令。
在宿主機(jī)中創(chuàng)建 /var/jenkins_home
目錄,用于備份 Jenkins 中的數(shù)據(jù)。
在 Linux 中使用 Docker 啟動(dòng) Jenkins ,其命令如下:
docker run \ -u root \ -itd \ -p 8080:8080 \ -p 50000:50000 \ -v /var/jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean
啟動(dòng)后,使用 docker logs {容器ID}
查看日志獲取 Jenkins 登錄密碼,其密碼是一串哈希字符串,例如:1abc12445adcf
。
最后打開 8080
端口,即可訪問 Jenkins。
安裝插件
登錄 Jenkins 后,會(huì)提示安裝推薦的插件,請(qǐng)根據(jù)提示安裝推薦的插件,推薦安裝的插件列表如下:
Folders Plugin OWASP Markup Formatter Plugin Build Timeout Credentials Binding Plugin Timestamper Workspace Cleanup Ant Gradle Pipeline GitHub Branch Source Plugin Pipeline: GitHub Groovy Libraries Pipeline: Stage View Git plugin SSH Build Agents Matrix Authorization Strategy Plugin PAM Authentication LDAP Email Extension Mailer Plugin Localization: Chinese (Simplified)
另外為了提供容器打包支持等,需要另外手工安裝以下插件。
# 提供 Docker 支持(必裝) docker Docker Pipeline docker-build-step # 可視化設(shè)計(jì)流水線腳本的工具(必裝) Blue Ocean # 提供對(duì) gitlab 支持,如果不使用可以不安裝 gitlab # 提供 Git 參數(shù)化和鉤子觸發(fā)構(gòu)建支持,不需要可以不安裝 Git Parameter Generic Webhook Trigger
拉取鏡像
這里介紹一下我們后面要用到的兩個(gè)鏡像。
拉取一個(gè) .NET Core SDK,每次啟動(dòng)流水線時(shí),都會(huì)啟動(dòng)一個(gè) .NET Core SDK 容器,為我們提供構(gòu)編譯、發(fā)布 .NET Core 程序的環(huán)境。
docker pull mcr.microsoft.com/dotnet/sdk:3.1
拉取一個(gè) ASP.NET Core Runtime,用于制作應(yīng)用鏡像的基礎(chǔ)鏡像。
docker pull mcr.microsoft.com/dotnet/aspnet:3.1
鏡像列表:
mcr.microsoft.com/dotnet/aspnet 3.1 ac199e8d6dff 2 weeks ago 208MB mcr.microsoft.com/dotnet/sdk 3.1 82e2a34647f0 2 weeks ago 710MB
制作 Jenkinsfile 腳本
筆者貼心地給各位同學(xué)準(zhǔn)備了 Demo 項(xiàng)目,請(qǐng)到 https://github.com/whuanle/DotNetCoreJenkinsDemo 倉庫,fork 到你的倉庫,后續(xù)我們使用這個(gè) ASP.NET Core 的 Demo 程序?qū)嵺`流程。
在項(xiàng)目文件中,可以找到一個(gè) Jenkinsfile 文件,此文件為我們定義流水線的步驟。
我們看一下簡單的 Jenkinsfile 模板:
pipeline { stages { stage('Build') { steps { echo 'Building..' } } stage('Test') { steps { echo 'Testing..' } } stage('Deploy') { steps { echo 'Deploying....' } } } }
stages
中,定義流水線的階段,在模板中,一個(gè)定義了三個(gè)階段,分別是 Build
、Test
、Deploy
。
每個(gè)階段都可以定義多個(gè)步驟(steps
),每個(gè)步驟中都可以執(zhí)行多個(gè)不同類型的 step。
stage('Test') { steps { echo 'Testing..' } }
demo 中的 Jenkinsfile 比較簡單,我們可以找個(gè) Publish
階段的內(nèi)容看一下:
stage('Publish') { steps { sh 'dotnet publish src/WebDemo -c Release' } }
其實(shí)很簡單,每個(gè)步驟執(zhí)行 shell 命令就行,我們可以使用 sh '...'
表示此步驟要執(zhí)行的 shell 命令。
接著我們看一下 Jenkinsfile 開頭的兩部分內(nèi)容。
// 全局環(huán)境變量 environment { IMAGENAME = 'webdemo' // 鏡像名稱 IMAGETAG = '1.0.0' // 鏡像標(biāo)簽 APPPORT = '8089' // 應(yīng)用占用的端口 APPDIR = '/opt/app' // 應(yīng)用工作的目錄 } agent { docker { image 'mcr.microsoft.com/dotnet/sdk:3.1' args '-v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker' } }
environment
中,可以定義此次構(gòu)建過程的環(huán)境變量。
agent
則是節(jié)點(diǎn)選擇器,可以選擇在何種環(huán)境下啟動(dòng)流水線,有 node
、docker
等類型。
構(gòu)建流水線
登錄到 Jenkins 網(wǎng)頁后臺(tái),在左側(cè)菜單欄中點(diǎn)擊?New Item
,開始創(chuàng)建流水線。
Jenkins 有多種流水線風(fēng)格,還可以通過添加插件,來加入更多的流水線類型,我們主要了解 Freestyle project 、Pipeline、Multibranch Pipeline 即可。
-
Freestyle project
Freestyle project流水線 使用上比較自由,不需要對(duì)項(xiàng)目做更改即可創(chuàng)建流水線,可以添加很多選擇、配置。如果流程需要變化,改動(dòng)比較麻煩。
-
Pineline、Multibranch Pipeline
他們都可以同時(shí)處理多個(gè)分支,這兩種都是依賴于項(xiàng)目中的 Jenkinsfile 文件。Multibranch Pipeline 好處是可以同時(shí)檢查多個(gè)分支,為每個(gè)分支創(chuàng)建構(gòu)建Job,而 Pipeline 會(huì)把多個(gè)分支放到一個(gè) Job 中。
點(diǎn)擊?New Item
?,創(chuàng)建流水線,選擇 Mutibranch Pipline。
添加 Git 源代碼 倉庫方式,我們可以自由選擇一種類型,建議使用?Single repository & branch
。
由于我們沒有添加密鑰,所以 Jenkins 無法訪問你的 Github 倉庫,所以需要添加一個(gè)可訪問的密鑰。
找一臺(tái)已經(jīng)安裝了 git 的電腦,生成公鑰私鑰,為 Jenkins 和 GitHub 之間提供加密連接。
執(zhí)行命令:
ssh-keygen -t rsa -b 2048 -C "email@example.com"根據(jù)提示,填寫要存放密鑰的路徑,如?
D:/id_rsa
。執(zhí)行命令后,會(huì)生成兩個(gè)文件,?
id_rsa
、id_rsa.pub
,復(fù)制 id_rsa (私鑰)中的內(nèi)容到 Jenkins 中。然后把?
id_rsa.pub
?(公鑰)的內(nèi)容添加到 Github 你的賬號(hào)中。
你可以使用多種方式添加認(rèn)證方式,最簡單、安全的是密鑰,我們可以選擇?Secret file
,然后上傳私鑰,或者使用別的方式,這里就不贅述了。
然后選擇要發(fā)布的分支,最后直接保存即可。
然后回到主界面,打開 我們創(chuàng)建的流水線,點(diǎn)擊 Build Now
,即可啟動(dòng)流水線。
構(gòu)建成功截圖:
在 Linux 服務(wù)器上,查看鏡像列表:
root@localhost ~ 19:54:20 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE webdemo 1.0.0 79b636ddef73 2 minutes ago 208MB
可以看到,已經(jīng)自動(dòng)打包應(yīng)用為鏡像,其鏡像名稱和版本號(hào),都可以在 Jenkinsfile 中設(shè)置。
觀察
我們可以在構(gòu)建界面中,觀察每個(gè)步驟的日志。
在 Open Blue Ocean 中,有更加好看的 UI 和方便的工具。
可視化設(shè)計(jì)流水線步驟。
觀察構(gòu)建過程。
原文鏈接:https://www.cnblogs.com/whuanle/p/14928651.html
相關(guān)推薦
- 2022-01-17 git git版本回退 回滾 解決方案
- 2022-12-02 C語言實(shí)現(xiàn)動(dòng)態(tài)順序表的示例代碼_C 語言
- 2022-05-18 python中l(wèi)eastsq函數(shù)的使用方法_python
- 2022-05-01 教你利用python如何讀取txt中的數(shù)據(jù)_python
- 2022-03-14 golang實(shí)現(xiàn)子網(wǎng)掩碼和網(wǎng)絡(luò)位長度相互轉(zhuǎn)換
- 2022-07-07 Python筆記之a(chǎn)?=?[0]*x格式的含義及說明_python
- 2022-07-19 Linux 中服務(wù)器硬件及RAID配置
- 2022-11-29 C#中泛型類和擴(kuò)展方法如何使用_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支