zoukankan      html  css  js  c++  java
  • 玩转spring boot——结合阿里云持续交付

    前言

      在互联网项目中,项目测试、部署往往需要花费大量时间。传统方式是在本地打包、测试完毕程序,然后通过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";
        }
    }
    App.java
    <!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>
    index.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>
    pom.xml

    build节点配置生成的jar名“<finalName>spring-skill-01</finalName>”,之后的脚步中会执行java -jar命令的jar的名称就是“spring-skill-01”

    增加三个配置文件:

    application.properties:

    ## dev | prod | test
    spring.profiles.active=dev

    application-dev.properties:

    name=u5F00u53D1u73AFu5883

    application-prod.properties:

    name=u751Fu4EA7u73AFu5883

    分别演示开发、生产环境的不同配置

    项目结构为:

    本地运行效果为:

    二、配置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>配置的。

    三、配置阿里云持续交付平台


    首先,登录阿里云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系列目录

  • 相关阅读:
    加入收藏
    c#在窗口标题栏上加按钮转载自:http://tech.ddvip.com/200810/122483002782273.html
    关于获取c# 的winform中DataGird控件选中行的值
    GridView中使用LinkButton添加启用禁用功能
    winfrom定制窗体样式
    C#读取xml文件
    C#winform程序如何与js交互
    ASP.NET不允许输入空格
    Winform TextBox中只能输入数字的几种常用方法(C#)
    winfrom中的webbrowser与web里面的html以及js的交互
  • 原文地址:https://www.cnblogs.com/GoodHelper/p/6343208.html
Copyright © 2011-2022 走看看