2020 年 11 月 18 日

IT Skills 波林

Polin WEI – 資訊工作者的技術手札

Jenkins 自動部署 Spring Boot 並自動起動

2 min read
jenkins-pwd

Jenkins 自動部署 Spring Boot 並自動起動

 

當程式存放在 程式版本控制 on GitHub or Gitee or Bitbucket or GitLab 有版本更新時,使用 Jenkins 可以減少人為手工的錯誤,並讓它自動部署及自動起動。這篇文章將 Jenkins 建置在 windows 10 作為說明。

 

  • 下載安裝檔

我們可以到以下連結下載適合的 OS 環境版本安裝,我們選擇熟悉的Windows環境。細部安裝步驟可以參考: Jenkins Master Server安裝

  1.  Jenkins – https://jenkins.io/download/
  2. Java – OpenJDKhttps://developers.redhat.com/products/openjdk/download
  3. Git Tool – https://git-scm.com/download/win
  4. Gradle Tool –  gradle-6.5

 

安裝 Jenkins 完後在幾分鐘後重新整理網頁,就過出現以下內容,我們可以依照指示在指定目錄找到初始管理員密碼,取得密碼後在下面輸入,接著按下Continue按鈕。

jenkins-pwd

 

  • 基本的配置設定

管理 Jenkins ->組態設定 : 設定遠端連到系統的網址,以及系統管理員的 email

jenkins-configuration

 

管理 Jenkins -> Global Tool Configuration : 將 JDKGitGradle 的路徑設好

jenkins-configureTools

 

 

 

  • 設定登入 GitLab 的憑證

Jenkins -> Credentials -> System -> Global credentials (unrestricted)

 

jenkins-credentials-gitlib

若不知怎麼設定  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 批次指令

invokeGradleScript

選擇 Invoke Gradle Script 後,會出現相對應的Gradle 區段,選擇 Global Tool Configuration 的 gradle-6.3,專案編譯的指令為 gradlew build

 

然後把編譯完成的檔案搬到要執行的目錄下

copy .\build\libs\myapps.jar D:\Progs\services\myapps.jar

 

啟動前,先將現在正執行的系統中止,這裡是查詢 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!
)

 

確定都停止後,再啟動

@echo off
set BUILD_ID=DontKillMe
d:
cd D:\Progs\services
start javaw -jar D:\Progs\services\myapps.jar
exit

 

工作建置的過程可以從 Console Output 中查看

  • 使用 email template
  1. 在網路上有找到一個不錯的Email Template,也可以自行設計,儲存到Jenkins目錄中,路徑為%ProgramFiles(x86)%\Jenkins\email-templates\,檔名這理存成 jenkins-email-template.jelly

註: 如果沒有email-templates,要自己新增資料夾

  1. 在 管理 Jenkins -> 設定系統 -> 擴充電子郵件通知

在 預設內容:這邊請設定 ${JELLY_SCRIPT,template="jenkins-email-template.jelly"},也就是上一個步驟存放的email template檔名,要用這個檔來產生電子郵件內容,這樣就可以了

  1. 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 密碼忘記解決方式
  1. 將 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>

 

jenkins-config-xml

 

2.重啟Jenkins服務;

3.進入首頁>“系統管理”>“Configure Global Security”;

4.勾選“啟用安全”;

5.點選“Jenkins專有使用者資料庫”,並點選“儲存”;

6.重新點選首頁>“系統管理”,發現此時出現“管理使用者”;

7.點選進入展示“使用者列表”;

8.點選右側進入修改密碼頁面,修改後即可重新登入。

 

參考:

How to add Java arguments to Jenkins?

 

Copyright © All rights reserved. | Newsphere by AF themes.