代码之家  ›  专栏  ›  技术社区  ›  MakotoE

如何在Azure DevOps中为Node.js应用程序创建发布管道?

  •  0
  • MakotoE  · 技术社区  · 6 年前

    我想通过创建发布管道,在Azure DevOps上为Node.js应用程序启用连续部署。我该怎么做?

    1 回复  |  直到 5 年前
        1
  •  3
  •   MakotoE    4 年前

    当我在一年前写下上一个答案时,azuredevops没有用于构建管道的web应用部署任务,因此必须使用发布管道来完成。通过构建管道进行部署要好得多,我强烈建议使用它,因为它允许您将所有CI/CD作业提交到repo(构建管道在侧栏中标记为“管道”,发布管道在“发布”中标记为“管道”。)

    因此,这个答案适用于通过构建管道部署web应用程序。如果您想使用发布管道,请参阅我以前的答案。

    1. Create a service connection.
    2. 假设您有一个web应用的服务连接,并且在DevOps中有一个Node.js项目,那么创建一个 package.json main.js
    {
      "name": "test-project",
      "version": "0.0.0",
      "scripts": {
        "start": "node main.js",
        "test": ""
      },
      "dependencies": {
        "express": "^4.17.1"
      }
    }
    
    const express = require('express');
    const app = express();
    const port = process.env.PORT || 3000; // You can see your app's env variables in Kudu: https://<your app>.scm.azurewebsites.net/
    
    app.get('/', (req, res) => res.send('Hello World!'));
    
    app.listen(port, () => console.log(`Example app listening on port ${port}!`));
    
    1. 现在需要管道的YAML文件。命名此文件 azure-pipelines.yml here .
    trigger:
      - '*' # Run pipeline when a commit is pushed to any branch
      - 'refs/tags/*' # Run pipeline when a tag is pushed
    
    jobs:
    - job: test
      pool:
        vmImage: ubuntu-latest
      steps:
      - script: npm install
        displayName: npm install
      - script: npm run test
        displayName: npm run test
    
    - job: deploy
      condition: startsWith(variables['Build.SourceBranch'], 'refs/tags/') # Run deploy job only if triggered by tag
      pool:
        vmImage: ubuntu-latest
      steps:
      - script: npm install
        displayName: npm install
    #  - script: npm run build # If you are using TypeScript
    #    displayName: npm run build
      - task: AzureWebApp@1 # https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-rm-web-app?view=azure-devops
        inputs:
          azureSubscription: <service connection name> # Replace this with the service connection name
          appName: test-project # Replace this with the web app name
          package: $(Build.SourcesDirectory)
          customWebConfig: -Handler iisnode -NodeStartFile main.js -appType node # https://docs.microsoft.com/en-us/azure/devops/pipelines/targets/webapp?view=azure-devops&tabs=yaml
    
    1. AzureWebApp@1
    2. 转到“管道”页面,然后单击“新建管道”。管道选项(非常简单):
    • “你的代码在哪里?”Azure Repos Git
    • “配置管道”现有Azure管道YAML文件
    • “选择现有YAML文件”路径
    • 单击Run
    • 在第一次运行时,可能会说服务连接未经授权。单击“Authorize resources”,然后使用Queue按钮手动再次运行构建,将解决此问题。
    • 要通过web界面执行此操作,请转到Repos下的Tags页,然后单击New Tag。出于某种原因,它需要一个标记描述,所以我只是复制标记名。
    • 如果您的站点显示应用程序错误消息,您可以通过转到Azure门户中的web应用程序,然后在侧栏中登录流页面来检查错误日志。请注意,应用程序容器仅在有人访问网页后启动。因此,要测试应用程序初始化,您必须首先访问您的网页。
        2
  •  3
  •   MakotoE    4 年前

    See my newer answer for a better solution.

    先决条件:

    • 要部署到的Azure Web应用服务
    • 你已经能够通过其他方式部署你的应用程序,比如ftp或Git

    有两种方法可以将部署步骤添加到管道中,它们是:通过构建管道中的YAML脚本,或者使用发布管道。这些步骤用于创建发布管道。我选择此选项是为了手动选择要部署的提交,但也可以自动触发它。

    1. 在构建管道中生成repo目录的工件。如果构建管道是通过YAML脚本完成的,请将其添加到YAML文件中( more info ):
    - task: PublishBuildArtifacts@1
      inputs:
        PathtoPublish: '$(System.DefaultWorkingDirectory)'
    
    1. 运行构建管道并等待它完成。确认生成了工件。
    2. 转到“发布”选项卡并创建新的发布管道。
    3. 在模板菜单中,找到“deploya Node.js app to Azure app Service”,然后单击应用。
    4. 单击“1个作业,1个任务”的链接打开阶段1。
    5. 这一部分令人难以置信地沮丧,但是 this Medium article 帮了很多忙。一开始没用,但那是因为我没什么都看。一定要读每一个句子,它应该工作。当连接显示“已验证”时,单击“确定”。
      • 可以选择“使用服务连接对话框的自动版本”,但该接口对我不起作用。
    6. 查找你的应用程序服务名称。
    7. 转到部署Azure应用程序服务任务。大多数设置不需要更改,但是您需要指定要使用的构建工件。这是在“包或文件夹”下完成的。点击“…”并找到你的构建工件。如果没有显示任何工件,则表示构建管道不工作。
    8. 打开最新的CI构建并单击“发布”按钮。
    9. “createanewrelease”模式中的所有默认设置都可以。点击“创建”。现在您可以打开发布管道并查看进度。如果由于连接问题而失败,请编辑您的发布管道并确认您的Azure资源管理器连接已验证,并且选择了正确的应用程序类型和应用程序服务。
    10. 转到您的站点并确认您的应用程序已成功部署。