CI/CD—Jenkins配置一次完整的jar自動化發布流程

背景:

實現設想:

? ? ? ?要創建自動化發布,需要準備一臺測試服務器提前安裝好java運行所需的環境,JDK版本最好和Windows開發機器上的版本一致,在Jenkins上配置將構建好的jar上傳到測試服務器上,測試服務器自動啟動構建好的jar,這些步驟只需要在Jenkins完成相關的配置即可。

一、環境準備

1、在測試機器上安裝java運行環境
#解壓
tar -zxvf OpenJDK17U-jdk_x64_linux_hotspot_17.0.8.1_1.tar.gz#配置環境變量
vim /etc/bashrc
#在文件末尾追加
JAVA_HOME=/opt/devops/java
export PATH=${JAVA_HOME}/bin:${PATH}

2、創建測試用戶
#創建用戶用于代碼測試,指定家目錄為/opt/devops/test
useradd -m test -d /opt/devops/test#設置test用戶密碼等會Jenkins的SSH認證需要用到
passwd test 

二、將IDEA代碼提交到GitLab并在Jenkins上創建maven項目

步驟一:將IDEA上的代碼提交到GitLab上

參考:

CI/CD—IDEA上提交代碼到GitLab-CSDN博客

步驟二:配置Maven連接GitLab并構建jar

參考:

CI/CD—Jenkins配置Maven+GitLab自動構建jar包-CSDN博客

二、Jenkins上進行操作

1、在Jenkins上安裝Publish Over SSH插件用于SSH認證

選擇如下圖示點擊安裝即可

2、?配置Publish Over SSH插件連接測試機器
2.1、選擇系統管理 --> 系統配置?

2.2、填寫連接測試機器的信息

3、Post Steps設置
3.1、點擊之前的構建的項目

?3.2、選擇Send files or execute commands over SSH選項

3.3、配置將Jenkins上生成的jar上傳到測試服務器上的相關選項

如下正則匹配:匹配Jenkins構建生成家目錄下target目錄下的jar包?

4、執行構建測試查看Jenkins下發的原理方便后續的配置?

4.1、執行構建

4.2、觀察傳到測試服務器上jar包的目錄結構

可以看到數據傳上去之后還帶有HelloWorld/target前綴,我們想要的結構就是將jar直接傳到測試服務器家目錄下不帶有HelloWorld/target目錄,如需要實現按照如下操作進行。

5、實現指定家目錄、去掉Jenkins前綴、自動啟動jar包的步驟
5.1、在Remove prefix中填寫需要去掉的目錄前綴
5.2、在Remote directory中填寫Source files中配置的內容傳輸到家目錄的具體哪個目錄下

在Remote directory中填寫java;表示將**/target/*.jar包傳到/opt/devops/test/java目錄下

6、Exec command配置測試服務器上執行的命令
#啟動jar,因為jar包的版本會變所以使用通配符進行匹配java -jar /opt/devops/test/java/*.jar >> /opt/devops/test/java/logs/java.log &

7、測試服務器上查看Jenkins自動化發布的結果
7.1、查看前綴是否已經去掉

7.2、查看jar是否傳送到/opt/devops/test/java目錄下

7.3、查看命令行是否已經執行

7.4、對前端內容進行訪問測試

在瀏覽器上輸入:http://192.168.72.132:8989/hello,對前端進行驗證

三、Jenkins調用測試服務器上的腳本執行復雜的任務

背景:?對jar進行構建前,測試機器上可能還運行著之前程序的進程或者有一些需要其他交互的場景,所以在進行構建之前應該要先將這些運行的進程等運行處理,再進行構建部署操作這樣就確保了測試環境的穩定,在進行構建時也減少了因為環境問題導致自動發布失敗等問題。

1、測試服務器上編寫java服務啟動腳本
#!/bin/bash
TIME=$(date +"%Y-%m-%d %H:%M:%S")
JAVA_PATH=/opt/devops/test/java
JAVA_LOG=${JAVA_PATH}/logs/java.logJavaStart ()
{echo ">>>>>>>>>>>>>>>>>Java Starting:${TIME}<<<<<<<<<<<<<<<<<<<
" >> ${JAVA_LOG}PID_NUM=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}'|wc -l)if [ ${PID_NUM} -gt 0 ];thenPID=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}')echo "[WARING] 已經存在JAVA進程$PID,退出本次操作!!"echo "
[WARING] 已經存在JAVA進程:$PID,退出本次操作!!
" >> ${JAVA_LOG}exitelsejava -jar ${JAVA_PATH}/*.jar >>${JAVA_LOG} 2>>${JAVA_LOG} &sleep 3PID_NUM=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}')if [ ${PID_NUM} -eq 0 ];thenecho "[ERROR] JAVA Fail To Start!!!"echo "
[ERROR] JAVA Fail To Start!!!
" >> ${JAVA_LOG}elsePID=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}')echo "[INFO] JAVA-PID:${PID} Successfully Runing!!!"echo "[INFO] JAVA-PID:${PID} Successfully Runing!!!" >> ${JAVA_LOG}fifi
}
JavaStart

情況一:程序已經運行,執行此腳本會退出不再執啟動命令,并將輸出結果打印到日志中

情況二:java啟動命令已經執行但是服務進程不存在啟動失敗

情況三:Java服務正常啟動

2、測試服務器上編寫java服務停止腳本
#!/bin/bash
TIME=$(date +"%Y-%m-%d %H:%M:%S")
JAVA_PATH=/opt/devops/test/java
JAVA_LOG=${JAVA_PATH}/logs/java.logMain ()
{PID_NUM=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|wc -l)if [ ${PID_NUM} -gt 0 ];thenPID_NUM=$(ps -ef|grep ${JAVA_PATH}/*.jar|grep java|grep -v grep|awk '{print $2}')kill -9 ${PID_NUM}echo "[INFO] JAVA-PID:${PID_NUM} Java Has Been Stopped!!!"if [ $? -eq 0 ];thenecho "
>>>>>>>>>>>>>>>>>Java Has Been Stopped:${TIME}<<<<<<<<<<<<<<<<<<<
" >> ${JAVA_LOG}fifi
}
Main

3、在Pre Steps中添加服務停止腳本

4、在Post Steps里也添加執行啟動腳本的命令

5、測試結果

自動發布連接超時解決方法

Publish over SSH超時機制

連接超時可能是因為腳本或者文件在傳送 過程中運行超時

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

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

相關文章

創建分區表ORA-14037

1、故障現象 在跑腳本的時候創建物化試圖提示分區界限過高 2、解決方法 最終原因是&#xff1a;缺少了 這個 r34411分區&#xff0c;加上就好。 判斷是物化視圖創建的時候需要兼容所有分區的數據&#xff0c;所以報錯&#xff0c;而分區表則不存在這種情況 3、測試驗證 分區…

轉和git subtree管理方式為git submodule的管理方式

將 Git 子樹&#xff08;subtree&#xff09;轉換為子模塊&#xff08;submodule&#xff09;的步驟如下&#xff1a; 1. 確定子樹的路徑和對應的遠程倉庫地址 找到當前項目中子樹的路徑以及對應的遠程倉庫地址。例如&#xff0c;假設子樹的路徑為 subtree-folder&#xff0c…

基于51單片機多功能防盜報警系統

基于51單片機多功能防盜報警系統( proteus仿真程序設計報告原理圖講解視頻&#xff09; 1. 主要功能&#xff1a;2. 講解視頻&#xff1a;3. 仿真4. 程序代碼5. 設計報告6. 原理圖7. 設計資料內容清單&&下載鏈接 仿真圖proteus8.9及以上 程序編譯器&#xff1a;keil 4/…

R語言和RStudio安裝

整體還是比較簡單的&#xff0c;主要是記錄個流程。 官方鏡像站列表R語言官網 1 安裝R&#xff08;2025/3/6&#xff09; R語言官網&#xff1a;The R Project for Statistical Computing 打開之后就Hello world一下吧 配置環境變量 2 安裝RStudio 下載地址&#xff1a;htt…

Ubuntu 22.04 升級到 Ubuntu 24.04 全流程指南

&#x1f4cc; 1. 前言 Ubuntu 24.04 是最新的 LTS 版本&#xff0c;帶來了內核更新、性能優化以及更強的安全性。本指南詳細記錄了從 Ubuntu 22.04 升級到 24.04 的完整過程&#xff0c;包括 升級前的準備、遇到的問題及如何選擇最佳選項&#xff0c;避免升級失敗或系統損壞。…

【每日學點HarmonyOS Next知識】Web跨域資源、Web長按菜單、Web攔截請求、禁止錄屏、Base64圖片寬高

1、HarmonyOS Web組件本地資源跨域問題&#xff1f; 關于資源跨域問題的解決&#xff0c;可以參考以下官網文檔&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-cross-origin-V5 方法一 為了使Web組件能夠成功訪問跨域資源&#xff0c;開…

數據庫查問題常用OS命令匯總

1、內存使用情況查看 top //查看活躍進程占用情況 free -mh //查看操作系統當前可用內存 2、cpu使用情況 lscpu //查看os cpu情況 sar -u -f sar文件名 -s hh:mm:ss -e hh:mm:ss //查看對應日期的歷史cpu情況 top //查看當前活躍進程使用cpu情況 3、io情況 iostat …

nlp培訓重點-5

1. LoRA微調 loader&#xff1a; # -*- coding: utf-8 -*-import json import re import os import torch import numpy as np from torch.utils.data import Dataset, DataLoader from transformers import BertTokenizer """ 數據加載 """cl…

CI/CD—Jenkins配置Maven+GitLab自動構建jar包

一、安裝Maven插件通過Maven構建項目 1、在Jenkins上安裝Maven Integration plugin插件 2、創建一個maven項目 2.1、填寫構建的名稱和描述等 2.2、填寫連接git的url 報錯&#xff1a;無法連接倉庫&#xff1a;Error performing git command: git ls-remote -h http://192.168.…

ngx_regex_create_conf

ngx_regex_create_conf 定義在 src/core/ngx_regex.c static void * ngx_regex_create_conf(ngx_cycle_t *cycle) {ngx_regex_conf_t *rcf;ngx_pool_cleanup_t *cln;rcf ngx_pcalloc(cycle->pool, sizeof(ngx_regex_conf_t));if (rcf NULL) {return NULL;}rcf->p…

【數據結構】初識集合框架及背后的數據結構(簡單了解)

目錄 前言 如何學好數據結構 1. 什么是集合框架 2. 集合框架的重要性 3. 背后所涉及的數據結構以及算法 3.1 什么是數據結構 3.2 容器背后對應的數據結構 3.3 相關java知識 3.4 什么是算法 3.5 基本關系說明&#xff08;重要&#xff0c;簡單了解&#xff09; 前言 …

P9242 [藍橋杯 2023 省 B] 接龍數列--DP【巧妙解決接龍問題】

P9242 [藍橋杯 2023 省 B] 接龍數列--DP 題目 解析什么時候該用 DP&#xff1f;動態規劃 vs 其他方法代碼 題目 解析 這題沒思路&#xff0c;壓根沒想到DP &#x1f626; 看了大神的題解&#xff0c;利用dp記錄每一個數結尾的長度&#xff0c;最后再用N-dp中的最大值&#xf…

用《設計模式》的角度優化 “枚舉”

枚舉應該都有用過&#xff0c;枚舉主要的作用是為了方便用戶查找和引用枚舉。 案例一 下面的枚舉邏輯很簡單&#xff0c;就是通過枚舉值返回不同的結果。 public enum OperationEnum {EQUAL_TO,CONTAINS,START_WITH,END_WITH;public String getOperationValue(String value)…

SQL根據分隔符折分不同的內容放到臨時表

SQL Server存儲過程里根據分隔符折分不同的內容放到臨時表里做查詢條件&#xff0c;以下分隔符使用“/”&#xff0c;可修改不同分隔符 --根據分隔符折分不同的內容放到臨時表--------------- SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS id, LTRIM(RTR…

Ubuntu切換lowlatency內核

文章目錄 一. 前言二. 開發環境三. 具體操作 一. 前言 低延遲內核&#xff08;Lowlatency Kernel&#xff09; 旨在為需要低延遲響應的應用程序設計的內核版本。Linux-lowlatency特別適合音頻處理、實時計算、游戲和其他需要及時響應的實時任務。其主要特點是優化了中斷處理、調…

基于Django創建一個WEB后端框架(DjangoRestFramework+MySQL)流程

一、Django項目初始化 1.創建Django項目 Django-admin startproject 項目名 2.安裝 djangorestframework pip install djangorestframework 解釋: Django REST Framework (DRF) 是基于 Django 框架的一個強大的 Web API 框架&#xff0c;提供了多種工具和庫來構建 RESTf…

VUE3開發-9、axios前后端跨域問題解決方案

VUE前端解決跨域問題 前端頁面需要改寫 如果無效&#xff0c;記得重啟服務器 后端c#解決跨域問題 前端js取值&#xff0c;后端c#跨域_c# js跨域-CSDN博客

DailyNotes 增加提醒功能

TODO&#xff1a;準備給 DailyNotes 增加一個提醒功能&#xff0c;準備接入 AI 來做一些事情。試了一下&#xff0c;非常靠譜。 具體 DailyNotes 和 Ollama 的交互方式&#xff0c;可以直接調用命令行&#xff0c;也可以走網絡API。 rayuK2CD9WCYN4 ~ % ollama run deepseek-…

PY32MD320單片機 QFN32封裝,內置多功能三相 NN 型預驅。

PY32MD320單片機是普冉半導體的一款電機專用MCU&#xff0c;芯片采用了高性能的 32 位 ARM Cortex-M0 內核&#xff0c;主要用于電機控制。PY32MD320嵌入高達 64 KB Flash 和 8 KB SRAM 存儲器&#xff0c;最高工作頻率 48 MHz。PY32MD320單片機的工作溫度范圍為 -40 ~ 105 ℃&…

OpenManus介紹及本地部署體驗

1.OpenManus介紹 OpenManus&#xff0c;由 MetaGPT 團隊精心打造的開源項目&#xff0c;于2025年3月發布。它致力于模仿并改進 Manus 這一封閉式商業 AI Agent 的核心功能&#xff0c;為用戶提供無需邀請碼、可本地化部署的智能體解決方案。換句話說&#xff0c;OpenManus 就像…