使用 Azure DevOps CICD 管道将遗留 .net 框架控制台应用程序部署到本地服务器
Deploy legacy .net framework console application to on prem server using Azure DevOps CICD pipeline
我是 DevOps 和 CICD 管道的新手。
我使用 Azure DevOps CICD 管道成功地将 ASP .NET MVC 网站部署到我的 onprem agent/machine 使用 Azure DevOps。
Similarly I want to deploy a console application which can be
ultimately used as scheduled job in windows 'Task Scheduler' or either
as a 'Windows Service'. Right now I am managing these deployments
manually but after seeing the power of DevOps I hope, there could be
really some automated solution for console apps as well.
应用程序是在 3.5 到 4.5 等遗留框架中构建的,因此不是 .net 核心应用程序。
我发现很多在线文章演示了如何在 azure 上部署 webjobs 或者可能适用于 onprem,但是旧的控制台应用程序有可能吗?
我尝试在 Framework 4.7 中构建一个非常简单的控制台应用程序,并尝试 deploy/copy/publish 到我的 onprem 机器的共享路径。已授予 运行 VSTS 代理服务的权限,但复制文件和发布工件任务失败。我尝试在 CI 和 CD 管道中执行此操作,但都失败了。
请查看管道和日志并提出我哪里做错了或有任何替代方案?
https://dev.azure.com/MSTCsandippatel/DemoConsoleApp
2019-11-05T05:03:52.8436105Z ##[error]Publishing build artifacts
failed with an error: Unable to create directory '\MAHANTAM\Azure
Artifacts\DemoConsoleApp'. Unable to verify the directory exists:
'\MAHANTAM\Azure Artifacts\DemoConsoleApp'. If directory is a file
share, please verify the share name is correct, the share is online,
and the current process has permission to access the share.
CI管道1
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=True /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'DemoConsoleApp'
publishLocation: 'Container'
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=True /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'DemoConsoleApp'
publishLocation: 'Container'
CI管道2
pool:
name: Azure Pipelines
demands:
- msbuild
- visualstudio
steps:
- task: NuGetToolInstaller@0
displayName: 'Use NuGet 4.4.1'
inputs:
versionSpec: 4.4.1
- task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
restoreSolution: '$(Parameters.solution)'
vstsFeed: '622d44e2-69d4-4d42-bb91-9d6ddd97f9ba/8eaf9077-829d-4567-93c0-8e0d7973634b'
- task: VSBuild@1
displayName: 'Build solution **\*.sln'
inputs:
solution: '$(Parameters.solution)'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
- task: PublishSymbols@2
displayName: 'Publish symbols path'
inputs:
SearchPattern: '**\bin\**\*.pdb'
PublishSymbols: false
continueOnError: true
- task: CopyFiles@2
displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**\bin$(BuildConfiguration)\**'
TargetFolder: '$(build.artifactstagingdirectory)'
condition: succeededOrFailed()
- task: CopyFiles@2
displayName: 'Copy Files Task'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**/**'
TargetFolder: '$(build.artifactstagingdirectory)'
condition: succeededOrFailed()
- task: ArchiveFiles@2
displayName: 'Archive $(Build.BinariesDirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: DemoConsoleApp'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
ArtifactName: DemoConsoleApp
如果您使用代理池 "Azure Pipelines" 作为您的代理,部署将发生在对您的本地机器一无所知的天蓝色云机器上。
您应该在本地安装一个自托管代理,link将其安装到您的 DevOps 并将其用于代理。
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops
我是 DevOps 和 CICD 管道的新手。
我使用 Azure DevOps CICD 管道成功地将 ASP .NET MVC 网站部署到我的 onprem agent/machine 使用 Azure DevOps。
Similarly I want to deploy a console application which can be ultimately used as scheduled job in windows 'Task Scheduler' or either as a 'Windows Service'. Right now I am managing these deployments manually but after seeing the power of DevOps I hope, there could be really some automated solution for console apps as well.
应用程序是在 3.5 到 4.5 等遗留框架中构建的,因此不是 .net 核心应用程序。 我发现很多在线文章演示了如何在 azure 上部署 webjobs 或者可能适用于 onprem,但是旧的控制台应用程序有可能吗?
我尝试在 Framework 4.7 中构建一个非常简单的控制台应用程序,并尝试 deploy/copy/publish 到我的 onprem 机器的共享路径。已授予 运行 VSTS 代理服务的权限,但复制文件和发布工件任务失败。我尝试在 CI 和 CD 管道中执行此操作,但都失败了。
请查看管道和日志并提出我哪里做错了或有任何替代方案?
https://dev.azure.com/MSTCsandippatel/DemoConsoleApp
2019-11-05T05:03:52.8436105Z ##[error]Publishing build artifacts failed with an error: Unable to create directory '\MAHANTAM\Azure Artifacts\DemoConsoleApp'. Unable to verify the directory exists: '\MAHANTAM\Azure Artifacts\DemoConsoleApp'. If directory is a file share, please verify the share name is correct, the share is online, and the current process has permission to access the share.
CI管道1
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=True /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'DemoConsoleApp'
publishLocation: 'Container'
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: NuGetToolInstaller@1
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=True /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'DemoConsoleApp'
publishLocation: 'Container'
CI管道2
pool:
name: Azure Pipelines
demands:
- msbuild
- visualstudio
steps:
- task: NuGetToolInstaller@0
displayName: 'Use NuGet 4.4.1'
inputs:
versionSpec: 4.4.1
- task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
restoreSolution: '$(Parameters.solution)'
vstsFeed: '622d44e2-69d4-4d42-bb91-9d6ddd97f9ba/8eaf9077-829d-4567-93c0-8e0d7973634b'
- task: VSBuild@1
displayName: 'Build solution **\*.sln'
inputs:
solution: '$(Parameters.solution)'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
- task: PublishSymbols@2
displayName: 'Publish symbols path'
inputs:
SearchPattern: '**\bin\**\*.pdb'
PublishSymbols: false
continueOnError: true
- task: CopyFiles@2
displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**\bin$(BuildConfiguration)\**'
TargetFolder: '$(build.artifactstagingdirectory)'
condition: succeededOrFailed()
- task: CopyFiles@2
displayName: 'Copy Files Task'
inputs:
SourceFolder: '$(system.defaultworkingdirectory)'
Contents: '**/**'
TargetFolder: '$(build.artifactstagingdirectory)'
condition: succeededOrFailed()
- task: ArchiveFiles@2
displayName: 'Archive $(Build.BinariesDirectory)'
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: DemoConsoleApp'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
ArtifactName: DemoConsoleApp
如果您使用代理池 "Azure Pipelines" 作为您的代理,部署将发生在对您的本地机器一无所知的天蓝色云机器上。
您应该在本地安装一个自托管代理,link将其安装到您的 DevOps 并将其用于代理。
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows?view=azure-devops