如何使用Azure DevOps为Node.js项目设置到Azure Linux虚拟机的持续部署
Azure DevOps 部署Node.js项目到Linux Azure VM 完整配置流程
前置准备
- 目标Linux Azure VM已开放22端口(或自定义SSH端口),持有对应账号的SSH密钥/用户名密码
- 已创建Azure DevOps项目,Node.js代码已上传至DevOps Repos
- VM上已提前安装好项目所需的Node.js、包管理工具(npm/yarn/pnpm)、进程管理工具(推荐pm2)等运行环境
第一步:将VM注册为DevOps部署资源
不用手动提前在VM上创建部署文件夹,所有路径可在后续配置中自定义:
- 进入Azure DevOps项目,依次打开「管道」->「环境」,点击「新建环境」
- 环境类型选择「虚拟机」,填写自定义环境名称,资源类型选择「Linux」
- 页面会生成专属注册脚本,复制脚本后登录目标Linux VM执行,执行完成后VM会自动同步到DevOps的环境资源列表中
第二步:配置构建管道
构建管道负责将代码打包为可直接部署的产物,避免占用VM的编译资源:
- 新建管道,源选择存储Node.js代码的DevOps Repos,语言选Node.js,DevOps会自动生成基础配置模板
- 按实际项目需求调整构建步骤,参考配置如下:
trigger: - main # 替换为你的实际触发分支名 pool: vmImage: ubuntu-latest steps: - task: NodeTool@0 inputs: versionSpec: '18.x' # 替换为项目适配的Node.js版本 displayName: '安装指定版本Node.js' - script: | npm install npm run build # 纯后端无编译需求的项目可删除该行 displayName: '安装依赖并执行构建' - task: CopyFiles@2 inputs: Contents: | **/* !.git/** !node_modules/.cache/** TargetFolder: '$(build.artifactstagingdirectory)' displayName: '整理部署所需文件' - task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(build.artifactstagingdirectory)' ArtifactName: 'node-app' displayName: '发布构建产物'
第三步:配置发布管道
发布管道负责将构建产物推送到VM的指定路径并启动服务:
- 新建发布管道,源选择上一步的构建产物,阶段选择「空作业」
- 阶段内添加「部署到虚拟机」任务,环境选择之前创建的包含目标VM的环境
- 在内联脚本框填入部署执行脚本,参考配置如下:
# 自定义部署路径,可根据需求修改 DEPLOY_PATH="/opt/node-app" # 自动创建路径,无需提前手动新建 sudo mkdir -p $DEPLOY_PATH sudo chown -R $(whoami):$(whoami) $DEPLOY_PATH # 复制构建产物到目标部署路径 cp -r $(System.DefaultWorkingDirectory)/**/node-app/* $DEPLOY_PATH/ # 重启Node服务,示例为pm2管理场景,可替换为你实际使用的进程管理逻辑 cd $DEPLOY_PATH if pm2 describe app.js > /dev/null; then pm2 restart app.js else pm2 start app.js # 替换为实际项目启动文件路径 fi pm2 save
常见问题处理
- 部署文件夹找不到:无需提前在VM上手动查找或创建,部署脚本中的
mkdir命令会自动生成目标路径,路径可完全自定义 - 权限报错:给DevOps注册VM时使用的账号放开部署路径的读写权限,或在对应命令前增加
sudo执行即可
内容的提问来源于stack exchange,提问作者Khorf
相关产品推荐
相关产品推荐

