Этот блог предназначен в качестве практического руководства о том, как развернуть в IIS на виртуальной машине с помощью Azure DevOps YAML-трубопроводы. Если вы хотите прочитать больше о Azure DEVOPS, и преимущества DEVOPS Проверьте это: https://docs.microsoft.com/en-us/azure/devops/pipelines/?view=azure-devops
Некоторые предположения, прежде чем мы начнем:
- У вас есть доступ к серверу, который вы хотите развернуть и администратор доступа к PowerShell.
- У вас есть доступ к Интернету на удаленном сервере, который вы хотите развернуть.
- У вас есть Admin Access для установки .NET Core Hosting Bundle на сервере.
- Вы можете создавать среды, нажать код на репо и создавать трубопроводы.
- У вас есть API .NET CORE для развертывания.
Создание окружающей среды
Перейти к трубопроводам, а затем выберите среды.
Выберите Создать среду.
Введите имя окружающей среды, введите описание и Выберите виртуальные машины и нажмите Далее.
- Затем выберите универсальный провайдер в раскрывающемся списке и выберите Windows в качестве операционной системы. Затем вы можете скопировать сценарий регистрации с помощью значка копирования.
Откройте административный терминал PowerShell на Windows Машина, которую вы хотите развернуть, вставьте сценарий регистрации в терминал и запустить скрипт. Этот шаг обычно занимает пока.
Когда агент сделан загрузкой, вам будет предложено, если вы Хотите добавить тег на машину. Это не требуется, если там это одна машина в среде, но вам нужно будет добавить Связанные теги Если у вас есть несколько машин в окружающая обстановка.
Затем вам будет предложено спросить, хотите ли вы расстегнуть для каждого Задача, которая не требуется — так что вы можете сказать нет.
Затем вам будет предложено ввести учетную запись пользователя для агента Бег на машине. Вы можете оставить его как по умолчанию или создать Новая учетная запись услуг, при котором будет запущен агент.
Когда вашему агенту создается успех, вы сможете вернуться к Azure DEVOPS и посмотреть вашу виртуальную машину, добавленную в качестве ресурса в окружающей среде!
Создание стадии сборки
Перейти к трубопроводам, а затем выберите трубопроводы.
Выберите Создать трубопровод и подключитесь к источнику вашего приложения код.
- Выберите, чтобы показать больше на шаге конфигурирования трубопровода, затем выберите ядро ASP.NET.
- Затем у вас будет базовый трубопровод для приложений ASP.NET Core, вы можете добавить сцену сборки, добавив следующий фрагмент кода:
trigger: - master pool: vmImage: ubuntu-latest variables: buildConfiguration: 'Release' #Replace these variables to suit your application projectName: 'WeatherService' websiteName: 'WeatherService' appPoolName: 'WeatherService' stages: - stage: 'Build' displayName: 'Build' jobs: - job: steps: - task: DotNetCoreCLI@2 displayName: 'dotnet restore' inputs: command: 'restore' projects: '*.sln' - task: DotNetCoreCLI@2 displayName: Build inputs: command: 'build' projects: '*.sln' arguments: --configuration Release - task: DotNetCoreCLI@2 displayName: Test inputs: command: test projects: '*.sln' arguments: '--configuration $(BuildConfiguration)' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop
- Замените переменные вверху, чтобы удовлетворить ваше приложение, заменив имя пула приложения, имени сайта и имени проекта с деталями вашего проекта.
- Затем вы можете нажать Сохранить и запустить, чтобы устроить конвейер, который создает ваше приложение.
Создать выпуск трубопровода
- Перейдите на трубопроводы и выберите трубопроводы.
- Вы увидите созданный вами трубопровод, в левой части вашего трубопровода выберите «Дополнительные параметры», а затем выберите «Редактировать».
- Ваш трубопровод будет загружен, то вы можете добавить следующий код YAML в свой трубопровод:
- stage: 'Dev' displayName: 'Dev' dependsOn: 'Build' condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) jobs: - deployment: Dev displayName: Dev environment: name: 'Dev' resourceType: VirtualMachine variables: - name: websitePhysicalPath value: '%SystemDrive%\inetpub\wwwroot\$(websiteName)' strategy: runOnce: deploy: steps: - task: IISWebAppManagementOnMachineGroup@0 inputs: IISDeploymentType: 'IISWebsite' ActionIISWebsite: 'CreateOrUpdateWebsite' WebsiteName: '$(websiteName)' WebsitePhysicalPath: '$(websitePhysicalPath)' WebsitePhysicalPathAuth: 'WebsiteUserPassThrough' CreateOrUpdateAppPoolForWebsite: true AppPoolNameForWebsite: '$(appPoolName)' DotNetVersionForWebsite: 'No Managed Code' PipeLineModeForWebsite: 'Integrated' AppPoolIdentityForWebsite: 'ApplicationPoolIdentity' AddBinding: true Bindings: | { bindings:[ { "protocol":"http", "ipAddress":"", "hostname":"", "port":"80", "sslThumbprint":"", "sniFlag":false } ] } - task: IISWebAppDeploymentOnMachineGroup@0 inputs: WebSiteName: '$(websiteName)' Package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/$(projectName).zip'
- После добавления скрипта выберите Сохранить и запустите, вы сможете отпустить его в среду, которую вы создали ранее.
Реконструировать
Когда вы сделали свой скрипт, он должен выглядеть что-то подобное:
trigger: - master pool: vmImage: ubuntu-latest variables: buildConfiguration: 'Release' projectName: 'WeatherService' websiteName: 'WeatherService' appPoolName: 'WeatherService' stages: - stage: 'Build' displayName: 'Build' jobs: - job: steps: - task: DotNetCoreCLI@2 displayName: 'dotnet restore' inputs: command: 'restore' projects: '*.sln' - task: DotNetCoreCLI@2 displayName: Build inputs: command: 'build' projects: '*.sln' arguments: --configuration Release - task: DotNetCoreCLI@2 displayName: Test inputs: command: test projects: '*.sln' arguments: '--configuration $(BuildConfiguration)' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Dev' dependsOn: 'Build' condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) jobs: - deployment: Dev displayName: Dev environment: name: 'Dev' resourceType: VirtualMachine variables: - name: websitePhysicalPath value: '%SystemDrive%\inetpub\wwwroot\$(websiteName)' strategy: runOnce: deploy: steps: - task: IISWebAppManagementOnMachineGroup@0 inputs: IISDeploymentType: 'IISWebsite' ActionIISWebsite: 'CreateOrUpdateWebsite' WebsiteName: '$(websiteName)' WebsitePhysicalPath: '$(websitePhysicalPath)' WebsitePhysicalPathAuth: 'WebsiteUserPassThrough' CreateOrUpdateAppPoolForWebsite: true AppPoolNameForWebsite: '$(appPoolName)' DotNetVersionForWebsite: 'No Managed Code' PipeLineModeForWebsite: 'Integrated' AppPoolIdentityForWebsite: 'ApplicationPoolIdentity' AddBinding: true Bindings: | { bindings:[ { "protocol":"http", "ipAddress":"", "hostname":"", "port":"80", "sslThumbprint":"", "sniFlag":false } ] } - task: IISWebAppDeploymentOnMachineGroup@0 inputs: WebSiteName: '$(websiteName)' Package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/$(projectName).zip'
Вы также должны иметь среду для развертывания вашего конвейера, чтобы вызвать Dev.
Когда вы ориентируетесь на трубопроводы, он должен выглядеть что-то подобное:
Вы также можете взглянуть на этот пример репозитории: https://github.com/Bassonrichard/AzureDevopsIISDEploy
Когда вы выпускаете это, у вас будет установлена настройка трубопровода DEVOPS с использованием трубопроводов YAML, сделав ваше решение для будущего с помощью простотой развертывания вашего решения.
Оригинал: «https://dev.to/bassonrichard/how-to-deploy-to-iis-using-azure-devops-yaml-pipelines-36ib»