部署业务代码至ECS

使用ECS的构建部署功能,可以直接从Git仓库自动拉取最新代码,并在单台ECS上完成应用的本地构建和自动化部署,为您提供了便捷、高效且低成本的解决方案,本文为您介绍如何快速将业务代码部署到单台ECS上。

说明

本文适用于在单台ECS上构建部署应用的场景,并且该应用需要频繁更新和部署。如果您需要在多台ECS实例上部署应用,请参见构建部署示例模板

前提条件

部署应用的ECS实例需满足以下条件:

  • ECS实例为Linux操作系统。

  • ECS实例需开通公网。具体操作,请参见开通公网

  • ECS实例必须处于运行中状态。

  • ECS实例已安装云助手,并且云助手状态为正常

代码源准备

本文使用了一个Spring Boot的项目代码来演示,代码已上传到Gitee和GitHub仓库(代码源),如果想要使用,请先fork到自己的仓库。代码地址:

操作步骤

  1. 登录ECS管理控制台

  2. 在左侧导航栏,选择实例与镜像 > 实例

  3. 在页面左侧顶部,选择目标资源所在的资源组和地域。地域

  4. 找到目标ECS实例,单击实例ID进入实例详情页,选择定时与自动化任务 > 构建部署 > 创建执行

    image

  5. 创建执行页面,填写代码源配置构建部署配置,然后单击下一步

    • 代码源配置:选择所有者组织仓库以及分支信息,并填写下载路径

      重要
      • 如果您未授权阿里云从您的GitHub/Gitee读取您的代码仓库,请单击前往授权来完成授权操作。

      • 如果您之前已经Fork示例代码,您只需下拉仓库,会自动展示您账号下所有仓库,请选择Fork的示例代码仓库。

      • 下载路径是指将代码下载到您ECS上的路径,如果不填写默认为/root/workspace/{当前执行的ID}。如需指定路径,请确保您提供的路径下没有文件,否则会导致拉取代码源失败。

      image

    • 构建部署配置

      • 使用Docker构建部署:开启Docker构建功能后,系统会检测您的ECS上是否已安装Docker,如果ECS上未安装Docker,则系统会为您自动安装。您在构建部署脚本中可直接使用Docker相关命令。

        重要

        仅以下操作系统支持使用Docker构建部署脚本:

        • Alibaba Cloud Linux 3/2

        • CentOS 7.7/7.8/7.9

        • Ubuntu 18.04/20.04/22.04/24.04

        • Debian 11/12

        screenshot_2025-01-02_13-41-16

        构建部署模式支持自动化模式自定义脚本模式两种方式。选择自动化模式时,您仅需提供相关信息(Dockerfile路径上下文路径Docker运行选项),执行任务后会自动完成docker build构建镜像和docker run启动容器。您也可以选择自定义脚本模式,手动编写构建部署脚本,自定义Docker部署脚本示例如下所示:

        # 构建当前版本的镜像
        docker build -t myapp:latest .
        container_name="my-container"
        
        # 停止上一版本的容器(如有)
        container_id=$(docker ps -aq -f name=${container_name}) 
        if [ -n "$container_id" ]; then
          docker stop $container_id
          docker rm $container_id
        fi
        
        # 启动当前版本的容器
        docker run -d -p 8080:8080 --name ${container_name} myapp:latest	
      • 未使用Docker构建部署:如果保持默认配置,即未开启Docker构建功能,则只需要输入构建部署脚本即可。本文仅提供一个示例,您可按需将该示例更换成适合您项目的脚本。

        screenshot_2025-01-02

        部署脚本示例(Alibaba Cloud Linux 3)

        ### Build jar file.
        set -e
        yum install -y maven-3.5.4
        mvn package
        
        ### Stop the previous version of the application (if any) and deploy the current version.
        PID=$(ps -ef | grep "sample-spring-1.0-SNAPSHOT.jar" | grep -v "grep" | awk '{print $2}')
        if [ -n "$PID" ]; then
            kill -9 $PID
        fi
        java -jar target/sample-spring-1.0-SNAPSHOT.jar &

        部署脚本示例(Ubuntu)

        ### Build jar file.
        set -e
        yum install -y maven
        mvn package
        
        ### Stop the previous version of the application (if any) and deploy the current version.
        PID=$(ps -ef | grep "sample-spring-1.0-SNAPSHOT.jar" | grep -v "grep" | awk '{print $2}')
        if [ -n "$PID" ]; then
            kill -9 $PID
        fi
        java -jar target/sample-spring-1.0-SNAPSHOT.jar &

        部署脚本示例(CentOS)

        ### Build jar file.
        set -e
        apt install -y maven
        mvn package
        
        ### Stop the previous version of the application (if any) and deploy the current version.
        PID=$(ps -ef | grep "sample-spring-1.0-SNAPSHOT.jar" | grep -v "grep" | awk '{print $2}')
        if [ -n "$PID" ]; then
            kill -9 $PID
        fi
        java -jar target/sample-spring-1.0-SNAPSHOT.jar &
  6. 确认基本信息任务信息,单击确定

    构建部署页签下的执行列表中,查看执行任务的执行状态已完成,说明部署已完成。该执行任务会从您指定的代码仓库拉取代码到ECS实例,并在您的代码根目录运行构建部署脚本。

  7. 验证业务代码是否在ECS上部署成功。

    本文示例中,您可以在浏览器中输入http://ECS实例公网IP:8080/hello查看已部署的应用。页面返回如下信息,说明已部署成功。

    说明

    本文示例ECS需开通入方向8080端口,具体操作,请参见添加安全组规则

    image

  8. (可选)如果您需要修改代码并重新推送到代码库后,您可以单击再次执行,部署脚本会检测并停止已部署应用,然后重新拉取部署最新的代码。

    image