用华为云 CodeArts 搭一条从提交代码到 ECS 上线的 CI/CD 流水线
摘要:本文以「代码托管 → 编译构建 → 部署到 ECS」为主线,手把手演示如何用华为云 CodeArts 把一次
git push自动变成线上可访问的新版本,并给出构建产物管理、部署回滚和常见踩坑的处理办法。
一、背景:为什么要把发布做成流水线
很多团队的发布流程还停留在「本地打包 → 手动上传 → 登录服务器替换文件」。这套做法有三个典型问题:
- 不可重复:每次发布依赖某个人记得住的操作顺序,换个人就容易出错。
- 不可追溯:线上跑的是哪个 commit 打出来的包,常常说不清。
- 回滚慢:出问题时要重新打包、重新上传,故障时长被拉长。
华为云 CodeArts 提供代码托管、编译构建、制品仓库、部署和流水线等能力,可以把上面这些环节串成一条自动化链路。下面用一套典型的 Spring Boot 应用做示例,其它语言只需替换构建脚本。
二、前置准备
- 一个可用的华为云账号,并已开通 CodeArts 相关服务。
- 一台已安装 JDK 与运行目录的 ECS,安全组放通应用端口(示例为 8080)。
- 代码仓库:可在 CodeArts Repo 新建,也可从 GitHub/Gitee 导入。
- 部署用的 SSH 私钥或账号密码,需在部署服务中提前配置为主机连接凭据。
建议先在 ECS 上规划好目录,例如 /opt/app/current 放运行包、/opt/app/releases 放历史版本,回滚时只需切换软链接。
三、动手:五步搭起流水线
步骤 1:托管代码并明确构建入口
将项目推送到 CodeArts Repo,并确认仓库根目录有可复现的构建方式。以 Maven 为例,保证下面这条命令在干净环境里能跑通:
mvn clean package -DskipTests
产出约定为 target/app.jar。构建命令一定要能在无人工干预下执行,凡是依赖本地缓存的步骤,都要在流水线里补齐。
步骤 2:新建流水线并选择代码源
进入 CodeArts 流水线,新建一条流水线,代码源选择上面的仓库,分支建议先绑定 main,并开启「代码提交触发」。这样每次合入主干都会自动跑一次。
步骤 3:编排编译构建任务
在流水线中加入「编译构建」阶段,选择 Maven 模板,指定 JDK 版本,构建命令使用步骤 1 验证过的命令。构建完成后把 target/app.jar 归档为构建产物,供后续部署阶段使用。
关键点:产物要按版本号或 commit 号命名,例如 app-${BUILD_NUMBER}.jar。这样部署和回滚时都能精确定位到具体版本,而不是一个永远叫 app.jar 的覆盖文件。
步骤 4:编排部署任务
在流水线中加入「部署」阶段,目标选择 ECS,主机连接使用事先配置好的凭据。部署动作建议拆成三步:
# 1. 上传新包到 releases 目录(由部署任务完成制品分发)
# 2. 停旧进程
systemctl stop app.service
# 3. 切换软链接并启动
ln -sfn /opt/app/releases/app-${BUILD_NUMBER}.jar /opt/app/current/app.jar
systemctl start app.service
把应用注册成 systemd 服务,能避免「进程被误杀后无人拉起」的问题。示例 unit 文件核心配置:
[Service]
ExecStart=/usr/bin/java -jar /opt/app/current/app.jar
Restart=always
RestartSec=5
步骤 5:串联并运行
把「代码源 → 编译构建 → 部署」串成完整阶段,保存后手动触发一次。观察每个阶段的日志,确认构建产物已归档、部署主机执行成功。
四、验证:怎么确认真的发布成功了
只看流水线变绿还不够,至少补两道验证:
- 接口探测:部署后执行一次健康检查,例如
curl -f http://<ECS_IP>:8080/actuator/health,返回UP才算通过。 - 版本核对:请求一个返回版本号的接口,确认线上版本与本次构建号一致,排除「部署成功但启动的是旧包」。
建议把健康检查作为流水线的最后一个任务,失败即标记该次发布失败,避免问题版本继续扩散。
五、常见坑与处理
- 构建通过、部署后启动失败:多为环境差异。检查 ECS 上的 JDK 版本、时区、配置文件是否与构建环境一致。
- 权限不足:部署账号对
/opt/app无写权限时,切换软链接会失败。提前用chown或 sudo 规则解决。 - 端口被占用:旧进程未真正退出就启动新进程。停服务后加一次
sleep或轮询端口释放再启动。 - 回滚无包可退:没有保留历史版本。务必按构建号保留 releases 目录,回滚时把软链接指回上一个版本即可。
六、总结
一条合格的 CI/CD 流水线,核心不是「能自动跑」,而是可重复、可追溯、可回滚。CodeArts 把代码托管、构建、部署串起来之后,团队需要守住三条约定:构建命令可复现、产物按版本归档、部署后有健康检查。做到这三点,发布就从「靠人记得住」变成了「靠流程保证」。
如果后续要扩展到容器化,可以把部署目标从 ECS 换成 CCE,构建阶段增加镜像构建与推送,流水线结构基本不变。
- 点赞
- 收藏
- 关注作者
评论(0)