做網(wǎng)站備案什么意思app推廣平臺放單平臺
1、創(chuàng)建jenkins容器
1,首先,我們需要創(chuàng)建一個 Jenkins 數(shù)據(jù)卷,用于存儲 Jenkins 的配置信息??梢酝ㄟ^以下命令創(chuàng)建一個數(shù)據(jù)卷:
docker volume create jenkins_data
啟動 Jenkins 容器并掛載數(shù)據(jù)卷:
docker run -dit --name=jenkins -p 9999:8080 -u=root --restart=always -v jenkins_data:/var/jenkins_home jenkins/jenkins
參數(shù)說明:
-i:表示運行容器
-t:表示容器啟動后會進入其命令行
-d:守護式方式創(chuàng)建容器在后臺運行
--name:容器名稱
-p 9999:8080:端口映射,宿主機端口:jenkins 容器端口
-u=root:指定容器用戶為 root 用戶
--restart=always 參數(shù)用于在容器重啟時自動啟動,這樣即使容器被刪除,數(shù)據(jù)卷的數(shù)據(jù)也不會丟失
-v jenkins_data:/var/jenkins_home jenkins/jenkins:將數(shù)據(jù)卷 “jenkins_data” 掛載到容器的 /var/jenkins_home 目錄上
2,然后執(zhí)行以下命令,獲取解鎖jenkins的密碼:
docker logs jenkins
瀏覽器登陸,輸入上面日志的密碼,并按提示安裝插件:
http://localhost:9999/
3,安裝maven:
docker exec -it jenkins apt-get update
docker exec -it jenkins apt-get install -y maven
4,最后重啟 jenkins 容器:
docker restart jenkins
2、創(chuàng)建jenkins項目:
1,重新登陸 jenkins,點 New Item,新建流水線項目:
配置參考:https://blog.csdn.net/cs888zsy/article/details/132910601
其中Jenkins file腳本如下:
pipeline {agent anystages {stage('拉取代碼') {agent nonesteps {echo '=====================拉取代碼開始====================='git(url: 'https://github.com/xxx.git', credentialsId: 'JackyZhang8888', branch: 'main', changelog: true, poll: false)echo '=====================拉取代碼完成====================='}}stage('編譯打包') {steps {echo '=====================項目編譯打包開始====================='sh 'mvn clean package -Dmaven.test.skip=true'echo '=====================項目編譯打包完成====================='}}stage('拷貝項目') {steps {echo '=====================拷貝項目路徑開始====================='sh '''BASE_DIR="/application"SOURCE_DIR="/var/jenkins_home/workspace/FileSystem/target/"DATE_FORMAT="%Y%m%d"DT=$(date +$DATE_FORMAT)TARGET_FOLDER="$BASE_DIR/$DT"if [ ! -d "$TARGET_FOLDER" ]; thenmkdir -p "$TARGET_FOLDER"ficp $SOURCE_DIR/*.jar "$TARGET_FOLDER"cp $SOURCE_DIR/*.jar "$BASE_DIR"'''echo '=====================拷貝項目路徑完成====================='}}stage('遠程部署') {steps {echo '=====================遠程部署開始====================='sh 'scp /application/demo-0.0.1-SNAPSHOT.jar Administrator@192.168.0.107:H:/application/dictionary/'sh 'ssh Administrator@192.168.0.107 "H: && cd H:\\application && deploy.bat"'echo '=====================遠程部署完成====================='}}}
}
執(zhí)行效果如下:
其中遠程部署(windows服務(wù)器)的步驟需要做如下準備:
3,部署springboot到遠程服務(wù)器
實現(xiàn)方式:Publish Over SSH + OpenSSH:通過windows端安裝openssh與jenkins建立ssh隧道可以實現(xiàn)sftp傳輸文件和遠程執(zhí)行命令
1、首先需要先在遠程windows服務(wù)器安裝openssh。通過PowerShell安裝OpenSSH服務(wù)器:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
這些命令首先添加OpenSSH服務(wù)器功能,然后啟動SSH服務(wù),并將其設(shè)置為開機自動啟動。也可以進入Windows 10 設(shè)置-應(yīng)用-可選功能,添加可選應(yīng)用,找到OpenSSH服務(wù)端并安裝。
此時,驗證容器telnet 22端口可以通:
docker exec -it jenkins telnet 192.168.0.107 22
Trying 192.168.0.107...
Connected to 192.168.0.107.
Escape character is '^]'.
SSH-2.0-OpenSSH_for_Windows_8.1
2、配置免密登陸:
(1)在C:\ProgramData\ssh\shd_config
中增加如下配置:
PubkeyAuthentication yes
并在在該配置文件中確定公鑰路徑administrators_authorized_keys的位置:
Match Group administratorsAuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
這表明對于管理員用戶,公鑰授權(quán)文件應(yīng)該位于%ProgramData%/ssh/administrators_authorized_keys
中。
非管理員用戶需要將上述sshd_config內(nèi)容注釋掉,其他電腦的ssh公鑰添加到C:\Users\username\.ssh\authorized_keys
中。
(2)jenkins容器內(nèi)生成SSH密鑰對:
docker exec -it jenkins ssh-keygen -t rsa
將生成的公鑰復(fù)制到遠程服務(wù)器上的authorized_keys文件中,默認路徑C:\Users\Administrator\.ssh\
;
(3)右鍵authorized_keys,選擇屬性->安全->高級->(左下角)禁用繼承;
彈框選擇“將已繼承的權(quán)限轉(zhuǎn)換為此對象的顯式權(quán)限”。
(4)Win鍵+R鍵,輸入并運行services.msc,打開服務(wù)列表,檢查OpenSSH Authentication Agent服務(wù)是否正常運行。如果是禁用狀態(tài)需要啟用,然后重啟一下sshd服務(wù)
此時重啟openssh后jenkins服務(wù)器中使用如下命令連接windows應(yīng)該是沒問題的:
docker exec -it jenkins ssh -i /root/.ssh/id_rsa Administrator@192.168.0.107
3、配置Publish over SSH
先在【插件管理】中下載Publish over SSH:
然后在【系統(tǒng)配置】里配置SSH Servers:填入ip、私鑰后測試成功:
PS: 遠程部署還可以使用如下插件:
SSH Pipeline Steps:https://plugins.jenkins.io/ssh-steps/
SSH Agent:https://plugins.jenkins.io/ssh-agent/
deploy:
:: 找到占用8080端口的應(yīng)用并刪除
@echo off
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :8080') do (taskkill /PID %%a /F
):: 備份
scp H:\application\demo-0.0.1-SNAPSHOT.jar H:\application\backup
scp H:\application\dictionary\demo-0.0.1-SNAPSHOT.jar H:\application\:: 后臺啟動應(yīng)用
@echo off
start javaw -jar H:\application\demo-0.0.1-SNAPSHOT.jar --workSpace=H