微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从 DevOps 发布管道创建到 IIS 服务器的部署

如何解决如何从 DevOps 发布管道创建到 IIS 服务器的部署

我已经搜索了一段时间,但没有找到一种创建“安装包”的好方法,以便在 IIS 上运行 Web 服务。

我的问题是,出于安全考虑,我们需要手动将文件复制到本地服务器,因此不允许自动执行此工作。但据我所知,所有 IIS 部署模板都使用 Deployment group 将版本分发到注册服务器。

有没有办法为 IIS 创建一个发布管道,生成一个可以从 DevOps 或从放置文件夹手动下载的 zip 文件/工件?

我使用任务 copyFiles@2、FileTransform@1 和 UniversalPackages@0 制作了一个发布管道来复制构建工件、转换 appsettings.json 文件并发布包,但这并没有为 IIS 添加必要的文件,例如 web.config 文件

感谢任何回复:-)

这是构建管道 yml 文件

trigger:
- release*

pool:
  vmImage: 'windows-latest'

variables:
  solution: '**/*.sln'
  buildplatform: 'Any cpu'
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet build'
  inputs:
    command: build
    projects: '**/*.sln'
    configuration: '$(buildConfiguration)'

- task: DotNetCoreCLI@2
  displayName: 'dotnet test'
  inputs:
    command: test
    projects: '**/*Tests.csproj'
    arguments: '--configuration $(buildConfiguration) --no-restore --collect "Code coverage"'
    testRunTitle: 'Unit and Integrtion Tests'

- task: DotNetCoreCLI@2
  displayName: 'dotnet publish'
  inputs:
    command: publish
    publishWebProjects: true
    arguments: '--configuration $(buildConfiguration) --output $(build.artifactStagingDirectory)'
    zipAfterPublish: true

- task: PublishPipelineArtifact@1
  displayName: 'publish pipeline artifact'
  inputs:
    targetPath: '$(build.artifactStagingDirectory)'
    artifactName: 'WebAPI'

以及发布管道: Release pipeline

解决方法

您可以直接使用与构建管道关联的发布管道。

enter image description here

在 Artifacts 下添加相关的构建管道,同时记得在构建管道下添加发布构建工件任务,这将有助于发布捕获最终的 zip 文件夹。

enter image description here

然后,您可以在Stages下创建一个Release,使用Manage IISWebsite Task和Deploy IIS Webiste/App > 任务。

enter image description here

这就够了。

,

经过一番周折,我最终得到了这个解决方案,使用了一个用于开发和发布的模板 yml 文件。

如果有人对改进有任何建议,请在下面评论。 希望这能有所帮助:-)

管道:

azure-pipelines-build-template.yml:

variables:
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'
  artifactPath: '$(build.artifactStagingDirectory)'

steps:
- task: DotNetCoreCLI@2
  displayName: 'dotnet build solution'
  inputs:
    command: build
    projects: '**/*.sln'
    configuration: '$(buildConfiguration)'

- task: DotNetCoreCLI@2
  displayName: 'dotnet test solution'
  inputs:
    command: test
    projects: '**/*Tests.csproj'
    arguments: '--configuration $(buildConfiguration) --no-restore'
    testRunTitle: 'Unit and Integrtion Tests'

- task: DotNetCoreCLI@2
  displayName: 'dotnet publish to pipeline'
  inputs:
    command: publish
    publishWebProjects: true
    arguments: '--configuration $(buildConfiguration) --output $(artifactPath)'
    zipAfterPublish: true

- task: PublishPipelineArtifact@1
  displayName: 'publish pipeline artifact Flyttavle'
  inputs:
    targetPath: '$(artifactPath)'
    artifactName: 'WebAPI'

azure-pipelines-dev-build.yml:

trigger:
- dev

pool:
  vmImage: 'windows-latest'

extends:
  template: azure-pipelines-build-template.yml

azure-pipelines-release-build.yml:

trigger:
- release*

pool:
  vmImage: 'windows-latest'

extends:
  template: azure-pipelines-build-template.yml

发布:

我创建了 4 个版本,Azure_Dev_DeployAzure_Release_Deploy 部署到 Azure,以及 On_Prem_Prod_DeployOn_Prem_Test_Deploy创建要下载的包以进行本地部署。

Dev_Deploy 和 Release_Deploy:

不同之处在于:

  • 分别为 dev 和 release 分支上的更改设置触发器
  • 部署指向 Azure 中的应用服务,分别用于开发和发布应用服务
  • Variables 分别指向 dev 和 release 变量替换(在库中定义)的变量组

Release Pipeline and Tasks for Dev_Deploy and Release_Deploy (两者设置相同,但图片显示的是 Dev 部署)

以及任务的 yaml 视图:

部署 Azure 应用服务:

steps:
- task: AzureRmWebAppDeployment@4
  displayName: 'Deploy Azure App Service'
  inputs:
    azureSubscription: '$(Parameters.ConnectedServiceName)'
    appType: '$(Parameters.WebAppKind)'
    WebAppName: '$(Parameters.WebAppName)'
    packageForLinux: '$(System.DefaultWorkingDirectory)/_BEDevBuild/WebAPI.zip'
    JSONFiles: '**/appsettings*.json'

On_Prem_Test_Deploy 和 On_Prem_Prod_Deploy:

不同之处在于:

  • 分别为 on-prem-test 和 on-prem-prod 创建工件
  • Variables 分别指向本地测试和本地生产变量替换(在库中定义)的变量组

Release Pipeline and Tasks for On_Prem_Test_Deploy and On_Prem_Prod_Deploy (两者设置相同,但图片显示的是测试部署)

以及任务的 yaml 视图:

文件转换:

steps:
- task: FileTransform@1
  displayName: 'File Transform: on-prem/prod'
  inputs:
    folderPath: '$(System.ArtifactsDirectory)/_BEReleaseBuild/*.zip'
    fileType: json
    targetFiles: '**/appsettings*.json'

全球发布:

steps:
- task: UniversalPackages@0
  displayName: 'Universal publish'
  inputs:
    command: publish
    publishDirectory: '$(System.ArtifactsDirectory)/_BEReleaseBuild'
    vstsFeedPublish: '********-****-****-****-************/********-****-****-****-************'
    vstsFeedPackagePublish: 'on-prem-prod'
    packagePublishDescription: 'Package for on premise production'

下载工件:

然后为了下载 Artifacts 提要中的工件,我在本地使用 Powershell 中的以下语句。

PS!至于今天,无法从 REST 调用下载通用包,这破坏了我在 Wiki 中创建下载链接的宏伟计划,但希望将来会支持。

预测试:

az artifacts universal download --organization "https://dev.azure.com/[my org name]/" --project "[DevOps project id]" --scope project --feed "on-premise" --name "on-prem-test" --version "*" --path .

本地生产:

az artifacts universal download --organization "https://dev.azure.com/[my org name]/" --project "[DevOps project id]" --scope project --feed "on-premise" --name "on-prem-prod" --version "*" --path .

参数提示:

  • --version "*" 将始终在提要中获取给定包名称的最新版本
  • --path . 将软件包下载到您在 Powershell 中执行命令的位置

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。