【问题标题】:Is it possible to deploy to an Azure Cloud Service requiring a startup script without a ccproj?是否可以在没有 ccproj 的情况下部署到需要启动脚本的 Azure 云服务?
【发布时间】:2015-12-31 17:00:17
【问题描述】:

我已经进行了一些挖掘,但我没有找到任何最近的文档:

我有一个 .NET 4.6 解决方案,其中包含我现在希望部署到云中的多个项目 - 特别是作为 Azure 云服务。

最好不必将创建云服务项目作为我的解决方案的一部分,因为我相信这是一个部署细节,因此与我的解决方案无关,我的解决方案可以很容易地托管在本地 IIS 机器上,甚至IIS 快递。因此,我发现的所有需要​​在我的解决方案中添加云服务项目的文档都感觉......很脏。

我的部署工具有 Jenkins 和 Octopus Deploy,如果可能的话,我希望让他们直接部署项目 - Octopus 似乎开箱即用,除了一个细节,我有一个启动脚本,它将需要在Azure云服务上运行:

  • 为确保安装正确版本的 .NET Framework,如果需要,请安装它。
  • 安装与我的其他服务器之一通信所需的 SSL 客户端证书。

对于本地或本地 IIS 安装,这不是问题,因为 Octopus Tentacle 可以在服务器上运行脚本以确保存在正确版本的 .NET Framework 和 SSL 的安装cert,但我无法理解如何在 Azure 云服务上镜像此任务。

【问题讨论】:

    标签: azure deployment azure-cloud-services octopus-deploy


    【解决方案1】:

    首先,您必须从章鱼脚本自动部署云服务。例如在 PowerShell 中,您可以这样编写代码:

    function CreateNewDeployment()
    {
    write-progress -id 3 -activity "Creating New Deployment" -Status "In progress"
    Write-Output "$(Get-Date –f $timeStampFormat) - Creating New Deployment: In progress"
    
    $opstat = New-AzureDeployment -Slot $slot -Package $packageLocation -Configuration $cloudConfigLocation -label $deploymentLabel -ServiceName $serviceName
    
    $completeDeployment = Get-AzureDeployment -ServiceName $serviceName -Slot $slot
    $completeDeploymentID = $completeDeployment.deploymentid
    
    write-progress -id 3 -activity "Creating New Deployment" -completed -Status "Complete"
    Write-Output "$(Get-Date –f $timeStampFormat) - Creating New Deployment: Complete, Deployment ID: $completeDeploymentID"
    
    #StartInstances
    }
    
    $packageLocation = "$currentDirectory/$packagefile"
    $cloudConfigLocation = "$currentDirectory/$cloudConfigFile"
    
    Import-AzurePublishSettingsFile $publishsettings
    Set-AzureSubscription -SubscriptionName $azureSubscription -CurrentStorageAccount $storageAccount
    
    CreateNewDeployment
    

    其次,您必须使用提升的执行上下文配置启动任务才能运行您的启动脚本。

    启动任务是云服务的一项独特功能,使您能够在角色启动之前对角色实例的虚拟机进行配置更改
    使用<WebRole><WorkerRole> 元素中的<Task> 元素在云服务定义(.csdef) 文件中定义启动任务。 <Task> 元素包含三个属性,您可以使用它们来影响任务的权限和行为,它们是:

    • commandLine 标识您要执行的程序或脚本。
    • executionContext 设置脚本所需的权限级别,以及 可以是有限的或升高的。配置更改,例如 更改 IIS 设置将要求任务在 提升模式。
    • taskType 可以是 simple、foreground 或 背景。一个简单的任务在角色之前同步执行 开始。前台和后台任务异步执行 与角色并行。前台任务可以保持角色运行 并防止其关闭或回收。后台任务将 如果角色需要关闭或回收,则停止

      Task commandLine="startup\startup.cmd" executionContext="elevated" taskType="simple"

    参考文档在这里 https://azure.microsoft.com/en-us/documentation/articles/cloud-services-startup-tasks/ 希望这可以帮助 新年快乐 ! 最好的祝福 斯蒂芬

    【讨论】:

    • 所以如果我理解正确的话,我需要部署 powershell 脚本(类似于您提供的示例)、包文件、.csdef 文件、publishsettings 文件(可以提供来自环境/帐户/Azure 订阅的 Octopus?人们会假设 Octopus 设置它的方式,它会)以及 csdef 需要引用的任何其他脚本......所有这些工作都意味着云服务项目是仍然是正确的方式吗?
    【解决方案2】:

    本质上,云服务项目可帮助您创作所需的文件、打包解决方案并进行部署。这些步骤可以分解为单个任务,其中创作和部署部分由 stephgou 和 Mr Lister 描述。

    要打包,您需要使用 CSPack.exe。 https://azure.microsoft.com/en-us/documentation/articles/cloud-services-model-and-package/#servicepackagecspkg.

    还可以在这里查看以了解该过程。另一个答案中提供的 PowerShell 将替代本文中的 GUI 指南:https://azure.microsoft.com/en-us/documentation/articles/cloud-services-how-to-create-deploy-portal/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-24
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2021-05-12
      • 2011-08-02
      相关资源
      最近更新 更多