Jenkins構建的項目類型介紹
jenkins 的安裝配置請參考:《jenkins war包安裝部署,tomcat+JDK+maven》
Jenkins中自動構建項目的類型有很多,常用的有以下三種:
自由風格軟件項目( FreeStyle Project)
Maven 項目(Maven Project)
流水線項目( Pipeline Project)
每種類型的構建其實都可以完成一樣的構建過程與結果,只是在操作方式、靈活度等方面有所區別,在實際開發中可以根據自己的需求和習慣來選擇。(PS: 個人推薦使用流水線類型,因爲靈活度非常高)
實驗用的是簡單的 maven 打包的項目,需要的小夥伴可以到我的GitHub拉取:GIthub實驗構建項目。項目構建會部署到遠程 Tomcat 的服務器上
先配置 Tomcat 服務器:
1、wget 安裝tomcat9的版本 :
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.34/bin/apache-tomcat-9.0.34.tar.gz
tar -xf apache-tomcat-9.0.34.tar.gz && mv apache-tomcat-9.0.34 /usr/local/tomcat
chmod +710 /usr/local/tomcat/bin/*.sh
2、用戶配置,設置登錄的用戶密碼都是: tomcat
[root@jenkins conf]# vim /usr/local/tomcat/conf/tomcat-users.xml
.....
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="tomcat,manager-script,manager-gui,manager-status,admin-gui,admin-script"/>
</tomcat-users>
爲了配的用戶能登錄到,還需要對一下進行修改
[root@enkins META-INF]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
停止tomcat並重新啓動即可
3、通過遠程的 Tomcat 地址登錄即可:http://loschost:8080/manager/html
項目構建環境需要安裝插件:Deploy to container(部署到遠程Tomcat插件) 和 Maven Integration(maven項目類型)、Pipeline(流水線項目類型)
項目類型一、自由風格項目構建
項目構建流程:拉取代碼->編譯->打包->部署
1、創建新的自由風格的項目,配置拉取的地址
2、編譯打包
構建->添加構建步驟->Executor Shell
echo "start:編譯和打包"
mvn clean package
echo "end:編譯和打包"
構建->構建後操作->Deploy war/ear to a container (前面一定要安裝Deploy to container插件)
構建->構建後操作->Deploy war/ear to a container -> Containers 選擇對應的tomcat版本,這裏用的是 Tomcat 9.x Remote
沒有憑證可以先添加憑證,憑證就是遠程Tomcat登錄的賬號密碼:http://loschost:8080/manager/html
3、構建測試:
打包完成後到Tomcat Web應用程序管理者點擊打開:http://loschost:8080/manager/html
如果顯示此頁面則表示部署成功
項目類型二、Maven 項目
1、創建項目,配置項目
創建項目時候選擇 “構建一個 mvaen 項目”,拉取代碼和遠程部署的過程和自由風格項目一樣,只是"構建"部分不同(前面需要安裝 Maven Integration 插件)
Root POM:pom.xml 對應GitHub上面的xml文件名
Goals and options:clean package
配置完成構建出來的結果和自由風格的一樣
項目類型三、Pipeline 流水線項目(Pipeline Script 或 Pipeline Script from SCM)
Pipeline Script 1、簡介
stages :代表整個流水線的所有執行階段。通常stages只有1個,裏面包含多個stage
stage :代表流水線中的某個階段,可能出現n個。一般分爲拉取代碼,編譯構建,部署等階段。
steps:代表一個階段內需要執行的邏輯。steps裏面是shell腳本,git拉取代碼,ssh遠程發佈等任意內
容。
1 )概念
Pipeline,簡單來說,就是一套運行在 Jenkins 上的工作流框架,將原來獨立運行於單個或者多個節點
的任務連接起來,實現單個任務難以完成的複雜流程編排和可視化的工作。
2)使用 Pipeline 有以下好處(來自翻譯自官方文檔):
代碼:Pipeline以代碼的形式實現,通常被檢入源代碼控制,使團隊能夠編輯,審查和迭代其傳送流
程。 持久:無論是計劃內的還是計劃外的服務器重啓,Pipeline都是可恢復的。 可停止:Pipeline可接
收交互式輸入,以確定是否繼續執行Pipeline。 多功能:Pipeline支持現實世界中複雜的持續交付要
求。它支持fork/join、循環執行,並行執行任務的功能。 可擴展:Pipeline插件支持其DSL的自定義擴
展 ,以及與其他插件集成的多個選項。
3)如何創建和使用 Jenkins Pipeline
Pipeline 支持兩種語法:Declarative(聲明式)和 Scripted Pipeline(腳本式)語法
Pipeline 也有兩種創建方法:可以直接在 Jenkins 的 Web UI 界面中輸入腳本;也可以通過創建一
個 Jenkinsfile 腳本文件放入項目源碼庫中
2、創建新的自由風格項目(兩個代碼類型二選一即可)
代碼類型一:流水線 -> 選擇HelloWorld模板
pipeline {
agent any
stages {
stage('pull code') {
steps {
echo '拉取代碼'
}
}
stage('Build projeck') {
steps {
echo '編譯構建'
}
}
stage('push code') {
steps {
echo '項目部署'
}
}
}
}
stages :代表整個流水線的所有執行階段。通常stages只有1個,裏面包含多個stage
stage :代表流水線中的某個階段,可能出現n個。一般分爲拉取代碼,編譯構建,部署等階段。
steps:代表一個階段內需要執行的邏輯。steps裏面是shell腳本,git拉取代碼,ssh遠程發佈等任意內容。
編寫一個簡單聲明式 Pipeline:
代碼類型二:流水線 -> 選擇Scripted Pipeline
node {
def mvnHome
stage('pull code') {
echo '拉取代碼'
}
stage('Build projeck') {
echo '編譯構建'
}
stage('push code') {
echo '項目部署'
}
}
Node :節點,一個 Node 就是一個 Jenkins 節點,Master 或者 Agent,是執行 Step 的具體運行
環境,Jenkins的Master-Slave架構的時候用到。
Stage :階段,一個 Pipeline 可以劃分爲若干個 Stage,每個 Stage 代表一組操作,比如:
Build、Test、Deploy,Stage 是一個邏輯分組的概念。
Step :步驟,Step 是最基本的操作單元,可以是打印一句話,也可以是構建一個 Docker 鏡像,
由各類 Jenkins 插件提供,比如命令:sh ‘make’,就相當於我們平時 shell 終端中執行 make 命令
一樣。
編寫一個簡單的腳本式 Pipeline:
構建測試觀察效果:
構建得出的結果都一樣
3、配置一個完整的 pipeline 腳本(這裏用的是:代碼類型一,聲明式腳本)
在對應項目下 “流水線語法” 可以編寫完成的 pipeline 腳本
通過生成器生成對應的 pipeline 腳本代碼
代碼拉取選擇:checkout:Check out from version control
構建選擇:sh:Shell Script
推送發佈選擇:deploy:Deploy war/ear to a container
pipeline {
agent any
stages {
stage('pull code') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'a20e4f7f-6d66-4055-9cbc-115cc9827664', url: 'https://github.com/arosendeng/rosen-jenkins.git']]])
}
}
stage('Build projeck') {
steps {
sh label: '', script: 'mvn clean package'
}
}
stage('push code') {
steps {
deploy adapters: [tomcat9(credentialsId: 'b1ca6678-8339-43bb-a0da-c3935c509dc2', path: '', url: 'http://192.168.66.102:8080/')], contextPath: null, war: 'target/*.war'
}
}
}
}
構建測試,發現可以構建成功
Pipeline Script from SCM
剛纔都是直接在 Jenkins 的 UI 界面編寫 Pipeline 代碼,這樣不方便腳本維護,建議把 Pipeline 腳本放在項目中(一起進行版本控制)
1、在項目根目錄建立 Jenkinsfile 文件,把內容複製到該文件中
文件放到項目的:src 目錄下,命名 Jenkinsfile
把 Jenkinsfile 上傳到 GitHab
2、引用文件
注意路徑:Jenkinsfile 在 src下,路徑爲 src/Jenkinsfile
以上的簡單實驗操作爲了對上述三種常用的構建方式多熟悉!!!以上的知識點學習都是來自 ”黑馬程序員“