我想通过创建发布管道来在Node.js应用程序的Azure DevOps上启用连续部署。我如何做到这一点?
答案 0 :(得分:3)
我花了几个小时试图弄清楚如何使Azure DevOps上的Node.js应用程序使用CI / CD,因为我可以参考的文档很少。我终于让它工作了,所以希望这些步骤对您有所帮助。注意:UI可能会随着时间而改变。这是在2018年10月编写的。
先决条件:
有两种方法可以将部署步骤添加到管道中,这些方法是:通过构建管道中的YAML脚本,或通过发布管道。这些步骤用于创建发布管道。选择此选项是为了可以手动选择要部署的提交,但也可以自动触发它。
- task: PublishBuildArtifacts@1 inputs: PathtoPublish: '$(System.DefaultWorkingDirectory)'
答案 1 :(得分:0)
当我写一年前的上一个答案时,Azure DevOps没有用于构建管道的Web应用程序部署任务,因此必须使用发布任务来完成,我不喜欢发布任务,因为发布管道不能添加到源代码管理中。通过您的构建管道进行部署要好得多,我强烈建议您这样做。它允许您将所有CI / CD任务写在一个文件中,然后将此文件添加到项目源中。
因此,此答案用于通过构建管道部署Web应用程序。如果您想使用发布管道,请参阅我的旧答案。
首先,您将需要服务连接。 See this question.
假设您的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}!`))
现在,您需要用于管道的YAML文件。将此文件命名为azure-pipelines.yaml
。 YAML模式文档为here。
trigger: # Runs pipeline every time you push commits and when you create a tag
- '*'
- 'refs/tags/*'
jobs:
- job: test
pool:
vmImage: ubuntu-16.04
steps:
- script: npm install
displayName: npm install
- script: npm run test
displayName: npm run test
- job: deploy
condition: contains(variables['Build.SourceBranch'], 'refs/tags') # Run deploy job only if triggered by tag
dependsOn: test
pool:
vmImage: ubuntu-18.04
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>
appName: test-project
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
将其推送到您的仓库中,然后创建一个构建管道。设置很简单。如果您的仓库中有azure-pipelines.yaml
,则安装程序应检测到该文件并允许您运行它。在第一次运行时,可能会说该服务连接未经授权。单击“授权资源”,然后使用“队列”按钮再次手动运行构建即可解决此问题。
我在构建中两次执行npm install
的原因是因为每个作业后都会清理工作区。我无法弄清楚如何保留上一份工作中的文件。
构建完成后,您可以通过创建标签来部署代码。在仓库的边栏中,有一个“标签”页面。在这里,您可以创建标签。由于某种原因,它需要标签描述,所以我只复制标签名称。现在,如果您返回到构建列表,您将看到部署作业正在运行。
构建完成后,请转到您的站点,您应该会看到hello world消息。如果您的站点显示应用程序错误消息,则可以通过以下方法检查错误日志:转到Azure门户中的Web应用程序,然后转到侧边栏中的“日志流”页面。请注意,只有在有人访问网页后,应用容器才会启动。因此,要测试应用程序的初始化,必须首先访问该网站。