我正在尝试为Angular应用程序设置CI/CD管道。我从一个教程中获得了灵感(真遗憾,我关闭了浏览器选项卡,忘记在代码中添加kudo注释),但最终安排这样做:
# Node.js with Angular
# Build a Node.js project that uses Angular.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/javascript
variables:
# Azure Resource Manager connection created during pipeline creation
azureSubscription: 'xxx'
# Environment name
environmentName: 'xxx'
# Web app name
webAppName: 'xxx'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: BuildJob
pool:
vmImage: 'ubuntu-latest'
steps:
- task: NodeTool@0
inputs:
versionSpec: '14.x'
displayName: 'Install Node.js'
- task: Npm@1
inputs:
command: 'ci'
displayName: 'NPM CI'
- task: Npm@1
inputs:
command: 'custom'
customCommand: 'install -g @angular/cli'
displayName: 'Install Angular'
- script: ng build --prod
displayName: 'build Angular'
- task: ArchiveFiles@2
displayName: 'Archive files'
inputs:
rootFolderOrFile: '$(System.DefaultWorkingDirectory)/dist/App-FE'
includeRootFolder: false
archiveType: zip
archiveFile: $(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip
replaceExistingArchive: true
- task: PublishBuildArtifacts@1
displayName: "Upload Artifacts"
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
ArtifactName: 'APP-FE'
publishLocation: 'Container'
- stage: Deploy
displayName: 'Deploy Web App'
dependsOn: Build
condition: succeeded()
jobs:
- deployment: DeploymentJob
pool:
vmImage: 'ubuntu-latest'
environment: $(environmentName)
strategy:
runOnce:
deploy:
steps:
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureSubscription)
appName: $(webAppName)
appType: webAppLinux
package: $(Pipeline.Workspace)/$(Build.BuildId).zip
问题发生在部署阶段。
理想情况下,我已经创建了一个zip工件来使用
2021-03-04T16:48:35.1679914Z File upload succeed.
2021-03-04T16:48:35.1680158Z Upload '/home/vsts/work/1/a/4406.zip' to file container: '#/7437349/APP-FE'
然后,在部署阶段检索该项目
2021-03-04T16:48:56.3711666Z Downloading items from container resource #/7437349/APP-FE
2021-03-04T16:48:56.3712634Z Downloading artifact APP-FE from: https://dev.azure.com/xxx//_apis/resources/Containers/7437349?itemPath=APP-FE&isShallow=true&api-version=4.1-preview.4
2021-03-04T16:48:56.3725395Z Downloading APP-FE/4406.zip to /home/vsts/work/1/APP-FE/4406.zip
2021-03-04T16:48:56.3726090Z Downloaded APP-FE/4406.zip to /home/vsts/work/1/APP-FE/4406.zip
但这会在/home/vsts/work/1/APP-FE/
中下载一个与ArtifactName
2021-03-04T16:48:57.8428994Z ##[error]Error: No package found with specified pattern: /home/vsts/work/1/4406.zip<br/>Check if the package mentioned in the task is published as an artifact in the build or a previous stage and downloaded in the current job.
正确的路径应该是
/home/vsts/work/1/APP-FE/4406.zip
。我可能会硬编码$(Pipeline.Workspace)/APP-FE/$(Build.BuildId). zip
路径,事实上我这样做是一种尝试,但我想更好地理解引用新上传的工件的正确语法应该是什么。
请注意,如果我通过硬编码路径来更改管道,我会修复此错误并进入下一个错误。
这个问题是关于理解如何建立一个干净简单和正确的管道
当使用Download Build Artifacts任务下载具有指定工件名称的工件时,正如@WaitingForGuacamole提到的,下载的构建工件将保留工件名称作为父文件夹。因此,在您的情况下,下载的工件文件的路径应该是“$(Pipeline。Workspace)/APP-FE/$(Build。BuildId)。zip”。
如果您不希望工件名称保留为父文件夹,您可以尝试使用下载管道工件任务。当您使用此任务下载单个工件时,工件名称将不会保留为父文件夹。
工件名称将总是路径的一部分,因为可以想象在这个部署之前的构建可能会发布不止一个工件。
因此,您的部署作业将需要提供工件路径,但您可以尝试这样做-在您的变量部分:
variables:
...
artifactName: 'APP-FE'
然后在发布阶段:
- task: PublishBuildArtifacts@1
displayName: "Upload Artifacts"
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
ArtifactName: $(artifactName)
publishLocation: 'Container'
然后在您的部署阶段:
- task: AzureWebApp@1
displayName: 'Deploy Azure Web App : $(webAppName)'
inputs:
azureSubscription: $(azureSubscription)
appName: $(webAppName)
appType: webAppLinux
package: $(Pipeline.Workspace)/$(artifactName)/$(Build.BuildId).zip
Azure 开发运营服务器 2020,在其他服务器上具有自承载代理 我有一个构建,它正在Azure工件中创建工件,然后触发了一个发布管道,该管道应该下载此工件并对其执行某些操作。以前,构建的输出是在文件共享上,它按预期工作。当我切换到Azure工件时,下载工件任务(由Azure运营模式自动添加)失败,如下所示: 所有其他构建任务在此服务器上工作都没有问题,此发布管道在其他服务器上也可以正常工作。当
更新日期:2020年2月20日 总结 Azure 开发运营管道生成无法从“项目”下的专用源中找到 NuGet 包。 我们的 Azure DevOps 环境 在Azure,我们有自己的公司“空间”:dev.azure.com/OurCompany 在此之下,我们有多个项目,例如,想象一下这三个项目: 绿色:包含特定类型的应用程序 蓝色:这包含不同类型的应用程序 红色:这包含我们的“通用”帮助程序代码
这是一个ASP。生成时没有错误的NET Core 3.0项目,但当它触发管道以发布到Azure App Service时,它失败,并出现以下错误: 2019-11-10t 23:09:23.8008460 z # #[错误]错误:未找到指定模式:D的包:\a\r1\a***。活力 需要做什么来修复发布管道?管道版本将最新的构建作为它的工件。
假设我有一个python包的标准python目录结构,就像这里一样,并考虑我需要向包中添加一个函数。更具体地说,我想通过运行一个测试代码,用试错法来做这件事。正确的工作流程是什么? 我目前做以下工作: 做,只要我在包中进行更改 打开一个 Python 解释器, 运行测试代码。 但显然,此流程需要花费大量时间来通过测试代码检查修改。我觉得我做错了什么,更好的方法存在。
当您选择此选项时,将生成 yaml 文件,如下所示: 在此 yaml 文件中,您可以定义从还原开始的整个部署周期
我正在尝试从Azure运营模式服务在Azure应用服务上部署docker容器。我已将docker映像推送到Azure容器注册表。当我尝试创建发布定义时,我找不到Azure容器注册表的服务连接。我已经为ACR创建了服务连接,但它没有显示在Azure运营模式门户的列表中。 当我选择“Azure 容器存储库”作为源类型时,服务连接在下拉框中不可见。我正在使用多克枢纽作为另一种选择。它在列表中显示服务连接