在软件的开发过程中,自动化的编译和部署能够带来很多的优势。如果可以通过一个脚本实现软件的自动化部署,那么就可以节省大量的时间去做其它事情。

下面介绍如何将云应用程序通过 PowerShell 自动发布到 azure 的 cloud services 上。

一、打包需要发布的内容

首先使用 msbuild 编译 *.ccproj 文件,在生成的所有文件中,我们需要用到以下两个:

app.publish\xxx.cspkg

app.publish\yyy.cscfg

二、下载 publishsettings 文件

有以下两种方法可以下载 publishsettings 文件:

1、如果没有 Azure 账号,则需要先注册账号;如果已有 Azure 账号,可直接登录下面的地址,下载 publishsettings 文件(国际版):

https://manage.windowsazure.com/publishsettings/index

下载到的文件的文件名:

xxx5-18-2016-credentials.publishsettings

其中xxx是你的 subscription 名称。

2、在 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。

四、创建自动发布的脚本

1、导入 azure module

在 powershell 中执行命令 Import-Module Azure,导入 azure module

2、设置脚本中使用的变量,其中部分参数变量需要根据自己的信息设定

$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”

3、导入 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
}

4、设置当前的 subscription

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

执行 Select-AzureSubscription -SubscriptionName $subscription –Current 命令进行设置

5、检查 deployment 是否存在

在执行部署前需要先检查 deployment 是否存在,这会影响到后面的部署方式。如果 deployment 不存在,则需要先建立 deployment。如果 deployment 已经存在,则需要更新 deployment。

命令逻辑如下:

$deployment = Get-AzureDeployment -ServiceName $service -Slot $slot -ErrorVariable a -ErrorAction silentlycontinue

if ($deployment.Name -ne $null)

{

# deployment 已经存在,使用 Set-AzureDeployment 命令进行更新,第7步会详细说明

}

else

{

# 需要使用 New-AzureDeployment 命令新建 deployment,第6步会详细说明

}

6、新建 deployment 并检查部署是否成功的命令

New-AzureDeployment -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service;

$completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot;

//检查部署是否成功

$completeDeploymentID = $completeDeployment.deploymentid;

7、更新已经存在的部署并检查部署是否成功的命令

Set-AzureDeployment -Upgrade -Slot $slot -Package $package -Configuration $configuration -label $deploymentLabel -ServiceName $service -Force;

$completeDeployment = Get-AzureDeployment -ServiceName $service -Slot $slot;

//检查部署是否成功

$completeDeploymentID = $completeDeployment.deploymentid;

8、从网站上查看发布结果

发布完成后,可以从网站上查看发布结果。

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

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

使用 PowerShell 自动化 CloudServices 发布的更多相关文章

  1. Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置

    最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑,特意记录下来方便有需要的人. 进入正题: 一.安装Jenkins 1.Mac上安装Jenkins 遇到到坑 因为 Jenk ...

  2. CODING DevOps + Nginx-ingress 实现自动化灰度发布

    作者:王炜,CODING DevOps 后端开发工程师,拥有多年研发经验,云原生.DevOps.Kubernetes 资深爱好者,Servicemesher 服务网格中文社区成员.获得 Kuberne ...

  3. 简析GeoServer服务的内部文件组织以及GeoServer自动化服务发布工具的开发思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 通过GeoServer发布的服务,在GeoServer内部有 ...

  4. 支持国内版Office 365的PowerShell模块现已发布

    作者:陈希章 发表于2017年5月12日 上一篇文章我详细介绍了如何在PowerShell中访问到Office 365的Graph API,在文章结尾处我留了一个问题,希望有朋友可以根据那个思路,尝试 ...

  5. 使用Docker搭建Jenkins+Docker持续集成环境(自动化构建发布部署)

    本文介绍如何通过Jenkins的docker镜像从零开始构建一个基于docker镜像的持续集成环境,包含自动化构建.发布到仓库\并部署上线. 0. 前置条件 服务器安装docker,并启动docker ...

  6. iOS自动化打包发布(fastlane)

    一.FastLane介绍 1.1 FastLane是什么? FastLane是一种配置iOS和Android自动化Beta部署和发布的最简单的方法之一.它可以简化一些乏味.单调.重复的工作,像截图.代 ...

  7. 大型项目linux自动化版本发布脚本(shell)之tomcat、nginx服务脚本

    开发十年,就只剩下这套Java开发体系了 >>>   最近,又临近博主所负责的一个大型项目的发版了.之前有提到过,该项目涉及到30-40台服务器的发版.且项目客户规定发版需在晚上10 ...

  8. [学习笔记]使用Docker+Jenkin自动化流水线发布.Net应用

    ​使用Docker容器方案可以快速安全地将项目部署到客户的服务器上,作为公司项目,需要解决两个问题: 1. 需要搭建一个私有的Docker仓库,以便安全的存储镜像 2. 需要一套自动化发布方案,实现代 ...

  9. iOS 自动化打包发布(Fastlane+ Jenkins+蒲公英)

    安装 Xcode 命令行工具:xcode-select --install 安装 fastlane:sudo gem install fastlane --verbose 安装成功后查看版本:fast ...

随机推荐

  1. Android-Parcelable

    Parcelable和Serializable的区别: android自定义对象可序列化有两个选择一个是Serializable和Parcelable 一.对象为什么需要序列化        1.永久 ...

  2. 学习笔记: Delphi之线程类TThread

    新的公司接手的第一份工作就是一个多线程计算的小系统.也幸亏最近对线程有了一些学习,这次一接手就起到了作用.但是在实际的开发过程中还是发现了许多的问题,比如挂起与终止的概念都没有弄明白,导致浪费许多的时 ...

  3. 公司内部培训AlwaysOn PPT分享

    公司内部培训AlwaysOn PPT分享 下载地址: http://files.cnblogs.com/files/lyhabc/alwayson.ppt

  4. [nRF51822] 7、基础实验代码解析大全(前十)

    实验01 - GPIO输出控制LED 引脚输出配置:nrf_gpio_cfg_output(LED_1); 引脚输出置高:nrf_gpio_pin_set(LED_1); 引脚电平转换:nrf_gpi ...

  5. ANDROID下面的游戏更新目录

    更新模块的整体方案终于搞定了,包括launcher的自更新,以及framework,app等代码的更新,均测试通过. 很激动地拿到ANDROID上去测试,一下就傻眼了. 在创建upd目录的时候,就遇上 ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (16) -----第三章 查询之左连接和在TPH中通过派生类排序

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-10应用左连接 问题 你想使用左外连接来合并两个实体的属性. 解决方案 假设你有 ...

  7. 前端编码规范之JavaScript

    上次浅谈了下关于CSS的编码规范,大部分童鞋持赞同意见,仍存在一些童鞋不太理解这些规范的意义. 如果是个人或者小作坊开发,其实这些所谓的编码规范也没啥意思,因为大家写好的代码直接就给扔到网上去了,很少 ...

  8. iOS---runtime介绍

    本文目录 1.Runtime简介 2.Runtime相关的头文件 3.技术点和应用场景 3_1.获取属性\成员变量列表 3_2.交换方法实现 3_3.类\对象的关联对象,假属性 3_4.动态添加方法, ...

  9. jQuery DateTimePicker 日期和时间插件

    jQuery UI很强大,其中的日期选择插件Datepicker是一个配置灵活的插件,我们可以自定义其展示方式,包括日期格式.语言.限制选择日期范围.添加相关按钮以及其它导航等. 日期选择插件是一个配 ...

  10. Uiautomator 2.0之UiObject2类学习小记

    1. 基础动作 1.1. 相关API介绍 API 说明 clear() 清楚编辑框内的内容 click() 点击一个对象 clickAndWait(EventCondition<R> co ...