ASP.NET Core + Jenkins 實現自動化發布

一、安裝Jenkins

我這邊服務器是Linux CentOS 7 ,使用SSH 登錄云服務器后,輸入以下命令安裝jenkins.

sudo wget -O /etc/yum.repos.d/jenkins.repo \https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install java-11-openjdk
sudo yum install jenkins
sudo systemctl daemon-reload
systemctl enable jenkins
sudo systemctl start jenkins

安裝成功后,在瀏覽器中輸入服務器?公網IP地址+8080端口訪問

上圖提示你需要從服務器上的initialAdminPassword文件復制jenkins的初始登錄密碼進行輸入,輸入后點擊繼續。

然后選擇?安裝Jenkins推薦的插件,然后等待所有推薦插件安裝完成.

安裝完后,創建一個登錄Jenkins的賬號

訪問地址配置用默認的就好(通過8080端口訪問)。

二、安裝Gitee插件

這邊以我的個人博客代碼為例子,因為目前我的個人博客代碼是托管到碼云上,因此這里利用Gitee插件來實現持續發布功能.

點擊左側 Dashboard->Manage Jenkins(系統管理) 菜單,并點擊Manage Plugins(插件管理)

選擇可選插件,然后輸入Gitee,然后點 Download now and install after restart,

這個插件主要是用于接收gitee WebHook通知(如:代碼提交、PR等)并觸發jenkins構建

安裝成功后,前往 Jenkins -> Manage Jenkins(系統管理) -> Configure System(系統配置) -> Gitee Configuration(Gitee配置) ,對插件進行配置。

添加一個新的證書令牌,按照如下配置,GiteeAPIV5 私人令牌可以通過頁面:https://gitee.com/profile/personal_access_tokens 生成,然后點擊添加。

這個時候點擊測試連接會發現報錯,無法連上,https://gitee.com/oschina/Gitee-Jenkins-Plugin/issues/I4NQAJ 這里面提出了解決方案 , javax.ws.rs-api jar包可以在這里(https://repo1.maven.org/maven2/javax/ws/rs/javax.ws.rs-api/2.1.1/)下載。

需要注意的是:安裝完相應jar包或者Jersey 2 API 插件后后記得重啟jenkins才能生效。

mkdir -p /var/cache/jenkins/war/WEB-INF/lib
cd /var/cache/jenkins/war/WEB-INF/lib
wget https://repo1.maven.org/maven2/javax/ws/rs/javax.ws.rs-api/2.1.1/javax.ws.rs-api-2.1.1.jarchmod a+x javax.ws.rs-api-2.1.1.jar
systemctl restart jenkins

按照以上方法試了后,我這邊還是不行,可能是我那個流程沒有操作對。

然后安裝Jersey 2 API后,重啟jenkins發現可行(我這邊jenkins版本比較新)

三、服務器相關編譯環境配置

  • 安裝.net core sdk.用于編譯,我這邊用的dotnet版本還是.net core 3.1,輸入以下命令安裝

sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.1
  • 安裝git

sudo yum install git

四、新建自動構建任務

進入 Dashboard->新建任務,輸入任務名稱,然后選擇流水線。

General配置

配置構建觸發器

配置流水線

點擊Credentials 右下方的添加按鈕,添加用于拉取代碼用的身份驗證憑據。

需要注意的是:如果使用git ssh 協議(也就是格式為git開頭的倉儲地址),則添加身份驗證憑據的時候,憑據類型只支持:Username with password (用戶名和密碼驗證)、SSH Username with private key(用戶名和私鑰驗證),用戶名就是gitee的登錄賬號。

創建身份驗證憑據秘鑰前,需要將服務器登錄用戶先切換到jenkins用戶,不然以root用戶創建的秘鑰文件,將無法拉取代碼(存在權限問題),切換到jenkins用戶前,先執行以下命令,以便允許jenkins用戶登錄。

sudo usermod -s /bin/bash jenkins

切換到jenkins用戶

sudo su - jenkins

在服務器上輸入以下命令創建身份驗證憑據私鑰,-C 后面的參數可以是任意內容,但通常用郵箱賬號。

ssh-keygen -t ed25519 -C?"xxxxx@xxxxx.com"

生成后,服務器上輸入以下命令讀取公鑰內容,然后將公鑰內容復制到gitee指定項目的 管理->部署公鑰管理->添加公鑰中添加指定公鑰,

cat ~/.ssh/id_ed25519.pub

gitee上添加公鑰后,在服務器上執行以下命令

ssh -T git@gitee.com

通過執行以下命令讀取ssh身份驗證私鑰內容,并輸入到 jenkins 身份驗證憑據的以下位置。

cat ~/.ssh/id_ed25519

添加身份驗證憑據后,按照下圖配置。

在jenkins 服務器上執行以下命令,創建ssh 身份認證秘鑰,并將公鑰復制到應用服務器上,以便在編譯成功后,直接復制dll到應用服務器上,而無需輸入應用服務的登錄密碼,需要注意的是,創建秘鑰前,先切換到jenkins用戶賬號。

sudo su - jenkins
ssh-keygen -t rsa

以下命令表示將jenkins所在服務器生成的公鑰復制到應用服務器(因為~/.ssh/目錄下已經有其他的秘鑰,因此這邊指定復制哪一個公鑰)

ssh-copy-id -i ~/.ssh/id_rsa.pub root@115.159.114.65?-p?1200

以上兩個命令執行成功后,可以創建一個文本文件進行測試,看下是否能無需輸入密碼就可以復制文件到應用服務器。

cd ~
touch test.txt
echo?"測試內容"?>> test.txt

以下命令用于將jenkins服務器上用戶主目錄下的test.txt文件復制到應用服務器上用戶主目錄。

# -P 表示應用服務器的ssh登錄端口(如果不是22,必須指定),-i 后面跟的是jekins服務器上生成的私鑰文件。
scp -P?1200?-i ~/.ssh/id_rsa ~/test.txt root@115.159.114.65:~

在項目的解決方案文件(.sln)同級目錄下新建名稱為jenkinsfile的文件,并輸入以下腳本內容

pipeline {agent anystages {stage('build') {steps {echo?'開始拉取代碼'sh?'git pull origin dev:dev'echo?'切換到本地dev分支'sh?'git checkout dev'echo?'當前工作目錄及文件列表如下'sh?'pwd'sh?'ls -al'dir("${WORKSPACE}/BlogSys") {echo?'開始編譯博客前端站點'sh?'dotnet publish ./BlogSys.csproj -c Release -r linux-x64 --no-restore'}//WORKSPACE表示存放代碼的根目錄。dir("${WORKSPACE}/BlogSysManagement"){echo?'開始編譯博客后臺站點'sh?'dotnet publish ./BlogSysManagement.csproj -c Release -r linux-x64 --no-restore'}}}stage('deploy'){steps {echo?'開始發布流程,當前工作目錄如下'sh?'pwd'echo?'開始發布個人博客前端系統'echo?'停止前端站點'sh?'ssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -T "systemctl stop blogsys"'//dir函數里面要用環境變量記得用雙引號,該函數用于改變當前目錄,dir函數塊里面包含的所有相對路徑都是相對于dir指定的目錄。dir("${WORKSPACE}/BlogSys/bin/Release/netcoreapp3.1/linux-x64/publish/"){//-i 用于指定ssh傳輸身份驗證私鑰,-r表示復制目錄下的所有文件及子目錄以及子目錄下的所有文件,也可以將這個文件夾打包壓縮后再傳輸。sh?'scp -P 1200 -i ~/.ssh/id_rsa -r ./ root@115.159.114.65:/var/www/blogsys'}echo?'重啟前端站點'//這里不能使用-t 選項,應該使用-T 或 -tt 代理,否則無法正確執行。sh?'ssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -T "systemctl restart blogsys"'echo?'開始發布個人博客后臺管理系統'echo?'停止后臺站點'sh?'ssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -tt "systemctl stop blogsysmgr"'dir("${WORKSPACE}/BlogSysManagement/bin/Release/netcoreapp3.1/linux-x64/publish/"){sh?'scp -P 1200 -i ~/.ssh/id_rsa -r ./ root@115.159.114.65:/var/www/blogsysmgr'}echo?'重啟后臺站點'sh?'ssh -i ~/.ssh/id_rsa root@115.159.114.65 -p 1200 -tt "systemctl restart blogsysmgr"'echo?'系統發布成功'}}}
}

完成以上步驟后就可以開始測試構建啦.

gitee+jenkins 實現代碼自動發布流程大概的流程

總結起來就是:

1、提交代碼到gitee

2、gitee通過Webhook鉤子通知jenkins gitee插件

3、gitee插件觸發構建(Gitee API V5 Token驗證)

4、git插件拉取代碼(通過SSH Username with Private key身份驗證方式)

5、執行編譯腳本

6、發布到應用服務器,另外需要注意的是 jenkins 默認是以jenkins用戶來執行的,因此需要開通jenkins用戶能執行bash的權限,以及創建git插件身份驗證秘鑰的時候一定要以jenkins用戶登錄去創建,否則要拉取代碼的時候會出現權限問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86310.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86310.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86310.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java項目RestfulAPI設計最佳實踐

大家好,我是鋒哥。今天分享關于【Java項目RestfulAPI設計最佳實踐】面試題。希望對大家有幫助; Java項目RestfulAPI設計最佳實踐 超硬核AI學習資料,現在永久免費了! 設計一個高效、易維護的 Java 項目中的 RESTful API 涉及到一…

FANUC機器人教程:用戶坐標系標定及其使用方法

目錄 概述 工作站創建 任務描述 用戶坐標系標定方法 用戶坐標系標定操作 用戶坐標系手動測試 用戶坐標系在程序中的應用 用戶坐標系選擇指令介紹 機器人示教編程 仿真運行 仿真案例資源下載 概述 FANUC機器人的用戶坐標系,是用戶對每個作業空間定義的直…

動態庫與靜態庫【Linux】

程序編譯過程 源代碼(.cpp) → 預處理(.i) → 編譯(.s) → 匯編(.o) → 鏈接(可執行文件) g -o main.i -E main.cpp 參數說明: 參數功能輸出文件類型-E僅預處理.i-S預處理 編譯.s-c預處理 編譯 匯編.o無完整流程(預處理→編譯→匯編→鏈接&…

MySQL MHA 故障轉移-VIP

MHA故障轉移-VIP #手工在主庫添加VIP ifconfig ens33:1 192.168.80.200/24配置VIP腳本 vim /usr/local/bin/master_ip_failoverchmod x /usr/local/bin/#!/usr/bin/env perl use strict; use warnings FATAL > all;use Getopt::Long;my ( $command, $ssh_user, $orig_mast…

Elasticsearch索引字段的類型

在 Elasticsearch 中,索引字段的類型(即 Mapping 中的字段類型)對搜索和存儲性能影響很大。下面是各種常用數據類型的用途及推薦使用場景總結: 1. keyword 類型(精確匹配) 適合數據: 不需要分詞…

kubernetes證書續簽-使用kubeadm更新證書(下)

#作者:任少近 文章目錄 查看kubelet證書查看kubelet當前所使用的證書 更換 node上的kubelet證書生成node1所需要的kubelet.conf文件生成node2所需要的kubelet.conf文件查看csr 更新 ~/.kube/config 文件重啟相關組件 查看kubelet證書 以上少了kubelet的證書&#…

AI智能體長期記憶系統架構設計:從認知模型到生產實踐

1 長期記憶:AI智能體的認知基石 1.1 人類記憶與AI記憶的類比 #mermaid-svg-VIPKAFe7VgN4UHFA {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-VIPKAFe7VgN4UHFA .error-icon{fill:#552222;}#mermaid-svg-VIPKAFe7V…

快速上手:利用音頻大模型與Java提取視頻文案

文章目錄 1、前言2、需求說明2.1 需求說明2.2 數據準備 3、功能實現3.1 使用視頻理解大模型能力3.1.1 三方平臺視頻在線鏈接解析3.1.2 三方平臺視頻內網鏈接解析3.1.3 三方平臺視頻轉存本地服務 3.2 使用音頻識別大模型能力3.2.1 三方平臺視頻在線鏈接解析3.2.2 三方平臺視頻詳…

LLM復雜記憶存儲-多會話隔離案例實戰

導讀:在多用戶并發的對話系統中,會話隔離問題往往成為開發者面臨的技術難題。當數千個用戶同時與AI助手交互時,如何確保每個用戶的對話歷史完全獨立,避免數據混淆和隱私泄露? 本文深入剖析了基于RunnableWithMessageHi…

【PX4-AutoPilot教程-TIPS】PX4系統命令行控制臺ConsolesShells常用命令(持續更新)

PX4系統命令行控制臺 Consoles & Shells 常用命令 查看每個應用程序的堆棧使用情況獲取所有可用命令和APP的列表應用程序啟動、停止和狀態查詢查看本地文件系統查看剩余的可用RAM查看工作隊列中正在運行的內容以及運行速率查看特定的uORB話題調試uORB話題進行模式切換和故障…

國內優秀wordpress主題推薦

在國內,WordPress 主題市場雖然不如國外那樣龐大,但依然有許多優秀且適合中國用戶需求的主題。以下是一些經過評估和推薦的國內優秀WordPress主題,涵蓋不同類型的網站需求,如博客、企業官網、資源站、社區論壇等。 WP漢主題 WP漢…

第 6 章:進階話題

第 6 章:進階話題 過擬合vs欠擬合:模型復雜度和泛化能力的關系 在前面的章節中,我們已經學習了神經網絡的基礎知識、常見架構和基本訓練流程。然而,在實際的深度學習項目中,僅僅掌握這些基礎知識是不夠的。我們還需要…

4.2_1樸素模式匹配算法

知識總覽: 什么是字符串的模式匹配: 主串:想從該串獲取結果的串 模式串:想搜索的內容,不一定在主串中能搜到,子串一定能在主串中搜到 字符串模式匹配:在主串找模式串并返回找到的第一個模式串…

華為云Flexus+DeepSeek征文|華為云ModelArts搭建Dify-LLM應用開發平臺(AI智能選股大模型)

前言 在當今數字化時代,人工智能(AI)技術在金融領域的應用愈發廣泛,其中 AI 智能選股大模型備受關注。為了構建高效且精準的 AI 智能選股大模型,選擇合適的開發平臺和工具至關重要。華為云 ModelArts 作為一款面向 AI …

C4.5算法深度解析:決策樹進化的里程碑

C4.5是機器學習史上最經典的算法之一,由ID3之父Ross Quinlan在1993年提出。作為ID3的革命性升級,它不僅解決了前代的核心缺陷,更開創了連續特征處理和剪枝技術的先河,成為現代決策樹的奠基之作。 本文由「大千AI助手」原創發布&am…

leetcode 65

#include <string> #include <vector> #include <unordered_map> using namespace std;class Solution { public:bool isNumber(string s) {// 定義狀態轉移表vector<unordered_map<char, int>> states {{{ , 0}, {s, 1}, {d, 2}, {., 4}}, // …

微服務(nacos+myibatis)中如何在一個模塊調用多數據庫源的一種方案

#nacos配置默認數據庫 spring.datasource.typecom.alibaba.druid.pool.DruidDataSource spring.datasource.driverNamecom.mysql.jdbc.Driver #默認數據庫名 master spring.datasource.dynamic.primarymaster spring.datasource.dynamic.strictfalse spring.datasource.d…

高標準通信國際接軌,Ethercat與PROFINET網關實現全自動化生產線

在呼和浩特&#xff0c;集成商以其先進的食品飲料行業解決方案&#xff0c;為乳制品行業打造了一個智能化工廠的典范。這個工廠的核心是PROFINET全集成自動化&#xff08;TIA&#xff09;&#xff0c;它通過SIMATIC S7-1200 PLC和ethercat系統&#xff0c;構建了一個強大的PROF…

Netty 引用計數抽象類 AbstractReferenceCountedByteBuf 詳解

核心類圖 ----------------------------- ---------------------------------- | ReferenceCountUpdater | | AbstractReferenceCountedByteBuf | | <T extends ReferenceCounted>| | (extends AbstractByteBuf) | ----------…

用Python做一個手機鏡頭

文章目錄 設置光學參數添加光學器件 設置光學參數 官方文檔&#xff1a;設計手機鏡頭 rayoptics中提供了OpticalModel類&#xff0c;可用于創建光學模型對象。OpticalModel類中的【optical_spec】成員&#xff0c;是一個OpticalSpecs對象&#xff0c;可用于指定光圈、視野、光…