5. 編寫SpringBoot項目
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。
接下來我們來編寫一個最簡單的SpringBoot入門項目。
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 [url=http://maven.apache.org/xsd/maven-4.0.0.xsd]http://maven.apache.org/xsd/maven-4.0.0.xsd[/url]"> <modelVersion>4.0.0</modelVersion> <groupId>com.itheima</groupId> <artifactId>springboot_jenkins01</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <!--所有的springboot工程都必須繼承spring-boot-starter-parent--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--web功能的起步依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
5.2. 核心配置文件application.properties
由於我們是基礎入門項目,所以我們只需要新建一個application.properties文件放在resources目錄下(當然不放置也是可以的),內容為空即可。
5.3. Controller類
package com.itheima.controller;import org.springframework.web.bind.annotation.DeleteMapping;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublic class QuickController {@GetMapping("/quick") public String quick(){ return "歡迎使用 springboot !Jenkins"; }}
5.4. 引導類
package com.itheima;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class SpringbootQuickApplication {public static void main(String[] args) { SpringApplication.run(SpringbootQuickApplication.class, args); }}
5.5. 運行項目
我們運行引導類的main方法即可運行項目,此時控制臺會輸出如下日誌,注意觀察標紅的部分,由於我們並沒有進行任何的配置,項目自動運行在了埠號為8080的tomcat中,項目名也默認為「」。
我們在瀏覽器中輸入"localhost:8080/quick",可以觀察到下圖的輸出,這說明我們的項目已正常運行。
5.6. pom_docker_registry.xml
由於我們接下來會使用Jenkins把項目打包成Docker鏡像,我們需要添加一個專門用於Docker的pom文件。內容為如下代碼塊:
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 [url=http://maven.apache.org/xsd/maven-4.0.0.xsd]http://maven.apache.org/xsd/maven-4.0.0.xsd[/url]"> <modelVersion>4.0.0</modelVersion> <groupId>com.itheima</groupId> <artifactId>springboot_jenkins01</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--web功能的起步依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <finalName>${project.artifactId}-${project.version}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>1.0.0</version> <!--docker鏡像相關的配置信息--> <configuration> <!--鏡像名,這裡用工程名--> <imageName>${project.artifactId}-${project.version}</imageName> <!--Dockerfile文件所在目錄--> <dockerDirectory> ${project.basedir}/src/main/resources </dockerDirectory> <!--TAG,這裡用工程版本號--> <imageTags> <imageTag>${project.version}</imageTag> </imageTags> <registryUrl>192.168.25.130:5000</registryUrl> <pushImage>true</pushImage> <imageName> 192.168.25.130:5000/${project.artifactId}:${project.version} </imageName> <!--構建鏡像的配置信息--> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include> ${project.artifactId}-${project.version}.jar </include> </resource> </resources> </configuration> </plugin> </plugins> </build></project>
5.7. 配置Dockerfile
在resources目錄下創建Dockerfile文件,該文件用於構建docker鏡像,文件名稱必須是Dockerfile。
FROM java:8ENV ARTIFACTID springboot_jenkins01ENV ARTIFACTVERSION 1.0-SNAPSHOTENV HOME_PATH /homeWORKDIR $HOME_PATHADD /$ARTIFACTID-$ARTIFACTVERSION.jar $HOME_PATH/$ARTIFACTID.jarENTRYPOINT ["java", "-jar", "springboot_jenkins01.jar"]
這一切都準備完畢之後,我們把項目push到上一節搭建好的GitLab中。
6. Jenkins
Jenkins是一個開源軟體項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工作,旨在提供一個開放易用的軟體平臺,使軟體的持續集成變成可能。
6.1. 安裝Jenkins6.1.1. 下載Docker鏡像
docker pull jenkinsci/blueocean
6.1.2. 創建Docker容器
docker create --name jenkins -u root -p 8889:8080 --privileged=true -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v /home/jenkins:/home docker.io/jenkinsci/blueocean
6.1.3. 啟動Docker容器
docker start Jenkins
6.1.4. 訪問Jenkins
在瀏覽器中輸入192.168.25.130:8889,可以觀察到下面的頁面,第一次啟動需要耐心的等待,時間比較久,另外還需要解鎖密碼,密碼在下圖標紅的位置。
6.1.5. 進入容器查看密碼
docker exec -it jenkins /bin/bashcat /var/jenkins_home/secrets/initialAdminPassword
6.2. 配置Jenkins6.2.1. 插件安裝
進入Jenkins中,我們可以進行插件的安裝,先選擇下圖第一個選項即可。
6.2.2. 創建用戶
6.2.3. 保存進入
6.2.4. 設置JDK、Maven、Git
進入【系統管理】,點擊【全局工具配置】,設置JDK、Git和Maven,我們可以選擇自動安裝。
6.2.5. 設置全局憑據
根據下圖我們設置下全局的憑據,注意此處要設置的是當前CentOS7的用戶名和密碼
6.3. 創建Jenkins任務6.3.1. 輸入任務名稱,選擇【構建一個自由風格的軟體項目】
6.3.2. 設置GitLab中項目的地址
6.3.3. 添加構建腳本
腳本內容:
#!/bin/bashresult=$(docker ps | grep "192.168.25.130:5000/springboot_jenkins01")if [[ "$result" != "" ]]thenecho "stop springboot_jenkins01"docker stop springboot_jenkins01firesult1=$(docker ps -a | grep "192.168.25.130:5000/springboot_jenkins01")if [[ "$result1" != "" ]]thenecho "rm springboot_jenkins01"docker rm springboot_jenkins01firesult2=$(docker images | grep "192.168.25.130:5000/springboot_jenkins01")if [[ "$result2" != "" ]]thenecho "192.168.25.130:5000/springboot_jenkins01:1.0-SNAPSHOT"docker rmi 192.168.25.130:5000/springboot_jenkins01:1.0-SNAPSHOTfi
6.3.4. 添加頂層Maven目標
clean package -f pom_docker_registry.xml -DskipTests docker:build
6.3.5. 添加Shell執行腳本
腳本內容
docker run --name springboot_jenkins01 -p 50101:50101 -idt 192.168.25.130:5000/springboot_jenkins01:1.0-SNAPSHOT docker logs -f springboot_jenkins01
6.4. 執行任務
點擊項目的左側菜單中的【立即構建】,可以觀察到下面的日誌內容,日誌太長,我分段給大家截取:
從gitlab中拉取源碼
2.停止並刪除之前運行的容器
3.通過Maven構建Docker鏡像
4.創建並運行Docker容器
此時在瀏覽器中訪問192.168.25.130:28080/quick,可以看到以下頁面,這也正是我們最初在本機運行時看到的內容
6.5. 配置鉤子
到此為止,我們已經實現了運行Jenkins任務,自動執行GitLab的代碼,但是我們還無法實現當GitLab中的代碼發生變化時,Jenkins自動構建任務的功能。接下來,我們配置下WebHook,來實現該功能。
6.5.1. 安裝GitLab插件
6.5.2. 安裝GitLab WebHook插件
6.5.3. Jenkins中配置Build Triggers
打開我們在Jenkins的任務進行設置,勾選Build Triggers,選擇下面標紅的複選框,並且複製其中的超連結。
6.5.4. GitLab配置webhook
打開GitLab中我們的項目,點擊設置中的Integrations,在URL中填入我們剛剛在Jenkins中粘貼的超連結。
6.5.5. 測試webhook
添加完webHook之後,我們點擊test按鈕,進行推送測試。
觀察Jenkins中,會發現Jenkins已經自動執行了該任務。這說明我們的webhook也已經正確配置了。
7. 總結
經過我們多款軟體的安裝配置,我們逐步掌握了如何上傳SpringBoot項目到GitLab中,並使用Jenkins自動構建任務,另外依託於Docker,讓這一切變得更加方便,希望大家都多多思考,讓機器自動幹活,減少我們IT從業人員的重複、繁瑣的工作量。