前言html
在互聯網項目中,項目測試、部署每每須要花費大量時間。傳統方式是在本地打包、測試完畢程序,而後經過ftp上傳至服務器,再把測試的配置文件修改成生產環境的配置文件,最後從新運行服務。這一過程若是交給人工完成每每容易出錯,如項目有大量的配置,而僅有一處配置不正確將會發生重大的災難,所以項目的持續集成和持續交付則尤其重要。以前,筆者的項目是經過git+maven+tomcat+jenkins來完成的,而現在阿里雲推出了持續交付平臺,筆者來爲你們踩踩坑。java
1、準備工做(spring boot+maven的項目)linux
package com.github.carter659.springskill01; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; /** * 入口類 博客出處:http://www.cnblogs.com/GoodHelper/ * */ @SpringBootApplication @Controller public class App { @Value("${name}") private String name; public static void main(String[] args) { SpringApplication.run(App.class, args); } @GetMapping("/") public String index(Model model) { model.addAttribute("name", name); return "index"; } }
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>玩轉spring boot——結合阿里雲持續交付</title> </head> <body> <h1>玩轉spring boot——結合阿里雲持續交付</h1> <h4> <a href="http://www.cnblogs.com/GoodHelper/">from 劉冬的博客</a> </h4> <h3 th:text="'環境爲:' + ${name}"></h3> <br /> <a href="http://www.cnblogs.com/GoodHelper/">點擊訪問原版博客(www.cnblogs.com/GoodHelper)</a> </body> </html>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.github.carter659</groupId> <artifactId>springskill01</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.3.RELEASE</version> </parent> <name>springskill01</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <finalName>spring-skill-01</finalName> </build> </project>
build節點配置生成的jar名「<finalName>spring-skill-01</finalName>」,以後的腳步中會執行java -jar命令的jar的名稱就是「spring-skill-01」nginx
增長三個配置文件:git
application.properties:github
## dev | prod | test spring.profiles.active=dev
application-dev.properties:web
name=\u5F00\u53D1\u73AF\u5883
application-prod.properties:spring
name=\u751F\u4EA7\u73AF\u5883
分別演示開發、生產環境的不一樣配置apache
項目結構爲:
tomcat
本地運行效果爲:
2、配置linux服務器
mkdir /opt/java mkdir /opt/run vi /opt/run/run.sh
「/opt/java」路徑是以後阿里雲持續交付平臺上傳文件的路徑
建立項目的目錄和運行項目的腳步文件
「/opt/run/run.sh」文件爲:
#!/bin/bash cd /opt/java ps aux | grep spring | xargs kill -9 tar -xzf package.tgz java -jar /opt/java/spring-skill-01.jar --spring.profiles.active=prod
目的是:解壓阿里雲持續交付平臺上傳的項目,執行java -jar運行並生產環境的spring boot的jar,而「spring-skill-01.jar」就是以前在pom.xml節點<finalName>spring-skill-01</finalName>配置的。
3、配置阿里雲持續交付平臺
首先,登陸阿里雲git庫「https://code.aliyun.com/」 建立git項目
選擇一個私有項目
建立完項目後,選擇持續交付平臺菜單
建立持續交付項目
爲該項目建立工做流
選擇默認模板並輸入名稱
配置工做流節點「打包」,執行「mvn package」命令
配置部署節點,設置以前在服務器建立的路徑「/opt/java」
配置運行腳本的路徑
配置機器受權
點擊拷貝按鈕,複製所拷貝的key
在服務器新建文件和key文件
mkdir $HOME/.ssh/ vi $HOME/.ssh/authorized_keys
在「$HOME/.ssh/authorized_keys」文件中粘帖複製的key
4、運行效果
執行git命令push代碼
git add. git commit -m 'ok' git push
因爲push代碼會觸發持續交付平臺的工做流
因此會按照以前設定好的腳本運行
部署完畢後,訪問服務器中項目:
總結
持續交付的整個簡單過程就演示完了,但上述方案並不完美。問題出在執行的腳本上,正式項目須要把spring boot建立成服務,使用服務中止的命令終止進程,而不是使用kill來殺死進程。另外,正式項目還須要部署多個web容器,以便於讓用戶不間斷和在察覺不到的狀況下更新程序,須要與nginx聯合使用。
代碼:https://github.com/carter659/spring-boot-skill-01.git
若是你以爲個人博客對你有幫助,能夠給我點兒打賞,左側微信,右側支付寶。
有可能就是你的一點打賞會讓個人博客寫的更好:)