前言
在互联网项目中,项目测试、部署往往需要花费大量时间。传统方式是在本地打包、测试完毕程序,然后通过ftp上传至服务器,再把测试的配置文件修改为生产环境的配置文件,最后重新运行服务。这一过程如果交给人工完成往往容易出错,如项目有大量的配置,而仅有一处配置不正确将会发生重大的灾难,因此项目的持续集成和持续交付则尤为重要。之前,笔者的项目是通过git+maven+tomcat+jenkins来完成的,而如今阿里云推出了持续交付平台,笔者来为大家踩踩坑。
一、准备工作(spring boot+maven的项目)
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.0modelVersion> <groupId>com.github.carter659groupId> <artifactId>springskill01artifactId> <version>0.0.1-SNAPSHOTversion> <packaging>jarpackaging> <parent> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <version>1.4.3.RELEASEversion> parent> <name>springskill01name> <url>http://maven.apache.orgurl> <properties> <project.build.sourceEncoding>UTF-8project.build.sourceEncoding> <java.version>1.8java.version> properties> <dependencies> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-webartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-thymeleafartifactId> dependency> <dependency> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-devtoolsartifactId> <optional>trueoptional> dependency> dependencies> <build> <plugins> <plugin> <groupId>org.springframework.bootgroupId> <artifactId>spring-boot-maven-pluginartifactId> plugin> plugins> <finalName>spring-skill-01finalName> build> project>
build节点配置生成的jar名“
增加三个配置文件:
application.properties:
## dev | prod | test spring.profiles.active=dev
application-dev.properties:
name=\u5F00\u53D1\u73AF\u5883
application-prod.properties:
name=\u751F\u4EA7\u73AF\u5883
分别演示开发、生产环境的不同配置
本地运行效果为:
二、配置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节点
三、配置阿里云持续交付平台
首先,登录阿里云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
四、运行效果
执行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
如果你觉得我的博客对你有帮助,可以给我点儿打赏,左侧微信,右侧支付宝。
有可能就是你的一点打赏会让我的博客写的更好:)
返回玩转spring boot系列目录