內容目錄
Jenkins 自動部署 Spring Boot 並自動起動
當程式存放在 程式版本控制 on GitHub or Gitee or Bitbucket or GitLab 有版本更新時,使用 Jenkins 可以減少人為手工的錯誤,並讓它自動部署及自動起動。這篇文章將 Jenkins 建置在 windows 10 作為說明。
下載安裝檔
我們可以到以下連結下載適合的 OS 環境版本安裝,我們選擇熟悉的Windows環境。細部安裝步驟可以參考: Jenkins Master Server安裝
- Jenkins – https://jenkins.io/download/
- Java – OpenJDK: https://developers.redhat.com/products/openjdk/download
- Git Tool – https://git-scm.com/download/win
- Gradle Tool – gradle-6.5
安裝 Jenkins 完後在幾分鐘後重新整理網頁,就過出現以下內容,我們可以依照指示在指定目錄找到初始管理員密碼,取得密碼後在下面輸入,接著按下Continue按鈕。
基本的配置設定
管理 Jenkins ->組態設定 : 設定遠端連到系統的網址,以及系統管理員的 email
管理 Jenkins -> Global Tool Configuration : 將 JDK、Git、Gradle 的路徑設好
設定登入 GitLab 的憑證
Jenkins -> Credentials -> System -> Global credentials (unrestricted)
若不知怎麼設定 Personal Access Tokens ,可以參考: 程式版本控制 on GitHub or Gitee or Bitbucket or GitLab
建立工作
選擇 建置 Free-Style 軟體專案: Start Myapps
在 原始碼管理 中輸入 git 的 Repository URL ,及選擇剛建立的憑證,至於 Branches to build ,可以輸入 Repository 中的分支來作佈署
在建置的區段,分別選擇 Invoke Gradle Script, 執行 Windows 批次指令
選擇 Invoke Gradle Script 後,會出現相對應的Gradle 區段,選擇 Global Tool Configuration 的 gradle-6.3,專案編譯的指令為 gradlew build
。
然後把編譯完成的檔案搬到要執行的目錄下
copy .\build\libs\myapps.jar D:\Progs\services\myapps.jar
先停止 xampp
@echo off echo "xampp stop" setlocal enabledelayedexpansion d: cd D:\xampp start xampp_stop.exe exit
kill javaw 的執行緒
啟動前,先將現在正執行的系統中止,這裡是查詢 javaw 的執行緒,有查到的就 kill
@echo off setlocal enabledelayedexpansion set prog=javaw echo "will kill program: %prog% in process" for /f "tokens=1-5" %%a in ('tasklist ^| find "%prog%"') do ( if "%%e%" == "" ( set pid=%%b ) else ( set pid=%%b ) echo !pid! ) if NOT "!pid!" == "" ( taskkill /f /pid !pid! )
重新啟動 xampp
確定都停止後,重新啟動 xampp
@echo off echo "xampp start" set BUILD_ID=DontKillMe d: cd D:\xampp start xampp_start.exe exit
以 javaw 啟動 spring boot
@echo off set BUILD_ID=DontKillMe d: cd D:\Progs\services start javaw -jar D:\Progs\services\myapps.jar exit
工作建置的過程可以從 Console Output 中查看
kill port 的執行緒
使用 java 的指令來啟動時, 若以上面用的 tasklist 來找 java process 執行緒, 則會連同 jenkins 本身的執行緒也被 kill ,所以改為找 port 來找 pid ,再來 kill 。
@echo off setlocal enabledelayedexpansion set port=10443 echo "will kill port: %port% in process" for /f "tokens=1-5" %%a in ('netstat -nao ^| find "%port%"') do ( if "%%e%" == "" ( set pid=%%e ) else ( set pid=%%e ) echo !pid! ) if NOT "!pid!" == "" ( taskkill /f /pid !pid! )
以 java 啟動 spring boot
@echo off set BUILD_ID=DontKillMe d: cd D:\Progs\services start /B java -jar D:\Progs\services\guspring.jar > D:\apps\logs\guspring.log 2>&1
註: 在 windows 中啟用時使用 start /B
,則 log 會同步顯示在檔案中,有助於偵錯( Debug ) 使用。
- 使用 email template
- 在網路上有找到一個不錯的Email Template,也可以自行設計,儲存到Jenkins目錄中,路徑為
%ProgramFiles(x86)%\Jenkins\email-templates\
,檔名這理存成 jenkins-email-template.jelly
註: 如果沒有email-templates
,要自己新增資料夾 - 在 管理 Jenkins -> 設定系統 -> 擴充電子郵件通知
在 預設內容:這邊請設定${JELLY_SCRIPT,template="jenkins-email-template.jelly"}
,也就是上一個步驟存放的email template檔名,要用這個檔來產生電子郵件內容,這樣就可以了 - Trigger
在建立好的工作Start Myapps
中,在可編式電子郵件通知 的 Advanced Settings,要設定觸發條件(Failure/Success or Always),請依照自身需求設定觸發條件,這樣就完成了
- 防火牆設定
本機以外的電腦若無法連入時,請檢查防火牆,並打開必要的 port
- 更改 Jenkins 啟動的 port
修改 C:\Program Files (x86)\Jenkins\jenkins.xml 裡的 port, 再重啟即可
- How to add Java arguments to Jenkins? 如何修改啟動參數
在 C:\Program Files (x86)\Jenkins\jenkins.xml 裡,將啟動參數放在 <arguments>...</arguments>
裡,記得參數前要加 -D
。
<service> <id>Jenkins</id> <name>Jenkins</name> <description>This service runs Jenkins automation server.</description> <env name="JENKINS_HOME" value="%BASE%"/> <!-- if you'd like to run Jenkins with a specific version of Java, specify a full path to java.exe. The following value assumes that you have java in your PATH. --> <executable>%BASE%\jre\bin\java</executable> <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable=true -Dmail.smtp.ssl.checkserveridentity=false -Dmail.smtp.ssl.trust=your.domain.com -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments> <!-- interactive flag causes the empty black Java window to be displayed. I'm still debugging this. <interactive /> --> <logmode>rotate</logmode> <onfailure action="restart" /> <!-- In the case WinSW gets terminated and leaks the process, we want to abort these runaway JAR processes on startup to prevent corruption of JENKINS_HOME. So this extension is enabled by default. --> <extensions> <!-- This is a sample configuration for the RunawayProcessKiller extension. --> <extension enabled="true" className="winsw.Plugins.RunawayProcessKiller.RunawayProcessKillerExtension" id="killOnStartup"> <pidfile>%BASE%\jenkins.pid</pidfile> <stopTimeout>10000</stopTimeout> <stopParentFirst>false</stopParentFirst> </extension> </extensions> <!-- See the referenced examples for more options --> </service>
- Jenkins admin 密碼忘記解決方式
- 將 C:\Program Files (x86)\Jenkins\config.xml 裡的文字區段(如下)移除後存檔
<useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy"> <denyAnonymousReadAccess>true</denyAnonymousReadAccess> </authorizationStrategy> <securityRealm class="hudson.security.HudsonPrivateSecurityRealm"> <disableSignup>true</disableSignup> <enableCaptcha>false</enableCaptcha> </securityRealm>
2.重啟Jenkins服務;
3.進入首頁>“系統管理”>“Configure Global Security”;
4.勾選“啟用安全”;
5.點選“Jenkins專有使用者資料庫”,並點選“儲存”;
6.重新點選首頁>“系統管理”,發現此時出現“管理使用者”;
7.點選進入展示“使用者列表”;
8.點選右側進入修改密碼頁面,修改後即可重新登入。
參考:
How to add Java arguments to Jenkins?
你必須 登入 才能發表評論。