Git部署物

当应用源文件是存储在Git仓库中的代码时,可以使用此种类型的部署物来发布应用。

工作原理

重要
  • 当发布的应用分组为ESS伸缩组时,部署期间伸缩活动会被暂停,部署结束后(无论成功或失败)将自动恢复。

  • 部署流程遵循先停后启原则,即每次部署都会先执行停止脚本,再执行启动脚本。

  1. 创建并发布部署物

    将应用源文件信息、启动脚本和停止脚本配置为部署物。

    创建发布任务,选择发布模式,将部署物发布至目标应用分组。

  2. 发布任务的自动化部署流程

    1. 获取部署物信息,包括Git仓库的信息和应用的启动/停止脚本。

    2. 拉取代码:将指定分支的代码拉取到工作目录下的code_deploy_application文件夹。

    3. 执行停止脚本:执行应用停止脚本,停止旧版本应用。

    4. 执行启动脚本:执行应用启动脚本,启动新版本应用。

适用范围

  • 仅支持部署到Linux实例。

  • 启动和停止脚本仅支持Shell类型的脚本。

操作步骤

  1. 创建应用并导入ECS实例。

    1. 如果没有ECS实例,前往ECS控制台-自定义购买页面,创建Linux操作系统的ECS实例并开通公网。

      建议ECS镜像选择Alibaba Cloud Linux 3.2104 LTS 64位或Ubuntu 22.04 64位。后续示例中的脚本基于这两种镜像编写。如果使用其他镜像,请参考示例并根据实际情况修改脚本。
    2. 前往ECS控制台-应用管理页面,单击导入已有资源创建,创建应用和应用分组,并导入ECS实例到应用分组。

  2. 创建部署物。

    1. 将以下示例代码Fork到个人的Git仓库。

      需注册个人GiteeGithub账号。如果实例地域为中国内地建议使用Gitee。
    2. 前往ECS控制台-应用管理页面,在我的应用页签下,单击目标应用名称。

    3. 在应用详情页,选择部署物页签,然后单击创建部署物

    4. 创建部署物页面,部署物类型选择Git仓库代码,设置参数后单击确定保存。

      • Git仓库信息:设置代码所在Git仓库的信息。

        如果是第一次使用,需按照控制台提示完成Git仓库一键授权。
      • 工作目录:应用启动/停止脚本的执行目录。示例:/root/deploy。代码默认拉取到该目录下的code_deploy_application文件夹。

      • 应用启动脚本

        Alibaba Cloud Linux

        ### 注意:Git仓库代码会自动下载到工作目录下的code_deploy_application文件夹,即 {工作目录}/code_deploy_application
        ### Attention: The Git repository code will be automatically downloaded to the code_deploy_application folder under the working directory, i.e. {workingDir}/code_deploy_application
        
        ### 启动当前版本的应用
        ### Start the current version of the application            
        function start_application() {
         cd ./code_deploy_application
         set -e
         yum install -y maven-3.5.4
         java -jar sample-spring-1.0-SNAPSHOT.jar &
        }
        
        start_application

        Ubuntu

        ### 注意:Git仓库代码会自动下载到工作目录下的code_deploy_application文件夹,即 {工作目录}/code_deploy_application
        ### Attention: The Git repository code will be automatically downloaded to the code_deploy_application folder under the working directory, i.e. {workingDir}/code_deploy_application
        
        ### 启动当前版本的应用
        ### Start the current version of the application            
        function start_application() {
         cd ./code_deploy_application
         set -e
         apt update
         apt install -y maven
         java -jar sample-spring-1.0-SNAPSHOT.jar &
        }
        
        start_application
      • 应用停止脚本

        ### Stop the application (if any)
        function stop_application() {
          PID=$(ps -ef | grep "sample-spring-1.0-SNAPSHOT.jar" | grep -v "grep" | awk '{print $2}')
          if [ -n "$PID" ]; then
            kill -9 $PID
          fi
        }
        
        stop_application
  3. 返回部署物列表,找到刚创建的部署物,单击发布。选择目标分组,单击确定开始部署。

  4. 结果验证。

    1. 进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。根据页面提示登录,进入终端页面。

    2. 执行curl http://localhost:8080/hello命令。返回Alibaba Spring Sample!表示部署成功。

重要字段

字段

说明

平台

选择代码所在的Git仓库平台。

所有者

选择Git仓库的所属账号。首次使用时需完成授权。

组织

选择个人仓库或者组织仓库。

仓库

选择代码所在仓库。

分支

选择要部署的分支。

CommitId

无需填写。选择分支后,系统将自动获取最新的CommitId。

工作目录

应用的启动/停止脚本的工作目录。

  • 需填写绝对路径。

  • 代码被自动拉取到工作目录下的code_deploy_application文件夹。

  • 可填写不存在的目录,执行期间会自动创建。

应用启动脚本

用于启动应用的Shell脚本。

应用停止脚本

用于停止应用的Shell脚本。
脚本需要能够正确停止当前及历史版本的应用。当没有应用在运行时,脚本也应能正常退出且不报错。

例如,以下脚本可停止名为my-container的容器(假设每个版本的容器名都叫做my-container),且在容器不存在时不会报错:

container_name="my-container"
container_id=$(docker ps -aq -f name=${container_name}) 
if [ -n "$container_id" ]; then
  docker rm -f $container_id
fi