在软件的开发过程中,自动化的编译和部署能够带来很多的优势。下面我们聊聊如何自动发布云应用程序到 azure 上的 cloud services。

打包要发布的内容

首先使用 msbuild 编译 *.ccproj 文件,我们需要使用生成产物中的:
app.publish\xxx.cspkg
app.publish\yyy.cscfg

下载 publishsettings 文件

使用你的 Azure 账号登录下面的地址,就可以下载 publishsettings 文件(国际版):
https://manage.windowsazure.com/publishsettings/index

下载到的文件的名字大概是这个样子:
xxx1-31-2017-credentials.publishsettings
前面的 xxxx 是你的 subscription 名称。

另一种方法是使用 powershell 命令 Get-AzurePublishSettingsFile 下载 publishsettings 文件,过程和上面差不多。

安装powershell的azure module

访问 https://azure.microsoft.com/en-us/downloads/#cmd-line-tools, 点击 “Command-line tools->PowerShell” 下面的 “Windows install” 下载安装包。
运行安装包,安装 azure modules。

创建自动发布的脚本

导入 azure module

Import-Module Azure

设置脚本中使用的变量

$package = app.publish\xxx.cspkg
$configuration = app.publish\yyy.cscfg
# subscription 名称
$subscription = "your subscription name";
# service 名称
$service = "your service name";
# storage account
$storage = "your storage account";
# slot 名称,一般会先发到 staging中,检查后再进行切换
$slot = "Staging";
# 为每次发布提供一个说明信息
$deploymentLabel = “your demplyment label”

导入 publish settings

publish settings 文件中记录了 subscription 信息以及用于登录的验证信息,所以先要把这些信息导入进来。
Import-AzurePublishSettingsFile publishsettings-file-path

最好在导入前能够先检查一下,看这个文件对应的 subscription 是不是已经被导入过了。

$thisSubscriptionExist = $False
$subs = Get-AzureSubscription
if($subs.Count -gt 0)
{
Foreach ($sub in $subs)
{
if($sub.SubscriptionName -eq $subscription)
{
$thisSubscriptionExist = $True
}
}
}

如果不存在才执行导入操作,否则直接进行下一步就行了。

if(!$thisSubscriptionExist)
{
Import-AzurePublishSettingsFile $subscriptionSetting
// 为subscription 添加一个storage account
Set-AzureSubscription -CurrentStorageAccount $storage -SubscriptionName $subscription
}

设置当前的 subscription

从上一步中我们可以发现,你机器上可能同时保存了多个 subscription 的信息。那么当我们执行发布操作时,默认会使用哪个 subscription 的信息呢?这里有一个当前 subscription 的概念,发布操作会使用当前 subscription 的信息进行发布。因此在发布操作之前一定要设置本次发布使用的 subscription 为当前 subscription。
Select-AzureSubscription -SubscriptionName $subscription –Current

检查 deployment 是否存在

在执行部署前需要先检查 deployment 是否存在,这会影响到后面的部署方式。如果 deployment 不存在,执行 New-AzureDeployment 命令。如果 deployment 已经存在,执行 Set-AzureDeployment 命令。

$deployment = Get-AzureDeployment -ServiceName $service -Slot $slot -ErrorVariable a -ErrorAction silentlycontinue
if ($deployment.Name -ne $null)
{
# deployment已经存在,使用Set-AzureDeployment命令进行更新。
}
else
{
# 需要使用New-AzureDeployment命令新建 deployment
}

新建 deployment

New-AzureDeployment -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service;
$completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot;
//检查部署是否成功
$completeDeploymentID = $completeDeployment.deploymentid;

更新已经存在的部署

Set-AzureDeployment -Upgrade -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service -Force;
$completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot;
//检查部署是否成功
$completeDeploymentID = $completeDeployment.deploymentid;

从网站上查看发布结果

发布完成后,我们也可以从网站上查看一下发布的结果。

Deployment label 是我们在发布脚本中设置的,一般会写入发布日期和版本号。
Deployment ID 是标识本次部署的 GUID。

总结,powershell 的 azure 模块已经提供了很完善的命令供我们进行自动化的发布使用,我们只要把这些命令组织成脚本就可以了。

Azure 基础:用 PowerShell 自动发布 CloudServices的更多相关文章

  1. Azure 基础:使用 powershell 创建虚拟网络

    什么是虚拟网络 虚拟网络是您的网络在 Azure 云上的表示形式.您可以完全控制虚拟网络的 IP 地址.DNS 的设置.安全策略和路由表.您还可以更进一步,把虚拟网络划分为多个子网.然后用它们连接您的 ...

  2. Azure 基础:用 PowerShell 自动登录

    PowerShell 是管理 Azure 的最好方式,因为我们可以使用脚本把很多的工作自动化.比如把 Azure 上的虚拟机关机,并在适当的时间把它开机,这样我们就能节省一些开支,当然我们同时也为减少 ...

  3. Azure 基础:使用 powershell 创建虚拟机

    在进行与 azure 相关的自动化过程中,创建虚拟主机是避不开的操作.由于系统本身的复杂性,很难用一两条简单的命令完成虚拟主机的创建.所以专门写一篇文章来记录使用 PowerShell 在 azure ...

  4. 使用 PowerShell 自动登录Azure

    PowerShell 是管理 Azure 的最好方式之一,通过使用 PowerShell 脚本可以把很多的工作自动化.比如对于 Azure 上的虚拟机,可以设置定时关机操作,并在适当的时间把它开机,这 ...

  5. 免费电子书:微软Azure基础之Azure Automation

    (此文章同时发表在本人微信公众号"dotNET每日精华文章") Azure Automation是Azure内置的一项自动化运维基础功能,微软为了让大家更快上手使用这项功能,特意推 ...

  6. Azure 基础 : 使用 template 简化部署

    笔者在前文中介绍了如何使用 PowerShell 脚本在 Azure 上创建虚拟主机.正如你所看到的,整个创建过程还是有点繁琐的,因为我们需要使用 PowerShell 脚本创建并关联所有相关的组件. ...

  7. Azure 基础 : 使用 Automation 定时开机

    不知何时 Azure 为虚机提供了自动关机的功能.这是一个很棒的功能,可以帮助我们定时关闭虚机并释放掉资源以节省开支.如果某台虚机在夜间不需要提供服务,我们就可以把它配置为晚上的某个时间点自动关机: ...

  8. 探索 Windows Azure 网站中的自动伸缩功能

     去年10月,我们发布了若干针对 WindowsAzure平台的更新,其中一项更新是添加了基于日期的自动伸缩调度支持(在不同的日期设置不同的规则). 在这篇博客文章中,我们将了解自动伸缩的概念,并 ...

  9. Azure 基础:Blob Storage

    Azure Storage 是微软 Azure 云提供的云端存储解决方案,当前支持的存储类型有 Blob.Queue.File 和 Table. 笔者在前文中介绍了 Table Storage 的基本 ...

随机推荐

  1. Mybatis oracle多表联合查询分页数据重复的问题

    Mybatis oracle多表联合查询分页数据重复的问题 多表联合查询分页获取数据时出现一个诡异的现象:数据总条数正确,但有些记录多了,有些记录却又少了甚至没了.针对这个问题找了好久,最后发现是由于 ...

  2. 微信和QQ网页授权登录

    一:微信授权 //用户授权 public function is_weixin(){ $url = "https://open.weixin.qq.com/connect/oauth2/au ...

  3. 移动App Crash的测试用例设计

    一些通用的触发移动App Crash的测试场景,如下: 1. 验证在有不同的屏幕分辨率, 操作系统 和运营商的多个设备上的App行为. 2. 用新发布的操作系统版本验证App的行为. 3. 验证在如隧 ...

  4. docker tag

    docker tag 命令以及其中的一些概念--之我见 1.  重要的本质的东西是 image - docker 最有用的东西是image,这个应该可以被大部分人接受 - 查看官网的 tag 命令,一 ...

  5. Java语言中IO流的操作规律学习笔记

    1,明确源和目的. 数据源:就是需要读取,可以使用两个体系:InputStream.Reader: 数据汇:就是需要写入,可以使用两个体系:OutputStream.Writer: 总结: 读:就是把 ...

  6. Angular - -ngKeydown/ngKeypress/ngKeyup 键盘事件和鼠标事件

    ngKeydown/ngKeypress/ngKeyup 该指令在按键按下/按键按下/按键松开时执行指定表达式. ngKeydown和ngKeypress略有不同,目前的测试是ngKeypress针对 ...

  7. SQLite存储区的日志模式

    目录内包含了三个文件xxx.sqlite.xxx.sqlite-shm.xxx.sqlite-wal 默认的日志模式为Write-Ahead Logging(WAL): 支持多个并发读取和一个并发写入 ...

  8. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)&&莫对算法

    这里跟曼哈顿最小生成树没有太大的关系. 时间复杂度证明: [BZOJ2038 小Z的袜子 AC代码] 排序方式: 第一关键字:l所在的块: 第二关键字:r从小到大. #include<cstdi ...

  9. XML 字符串解析

    微信红包发送完成后返回xml字符串,解析过程如下: 1.调用解析: public ActionResult GetEntityFromXml() { string str = @"<x ...

  10. CSS图形形状大全

    The Shapes of CSS All of the below use only a single HTML element. Any kind of CSS goes, as long as ...