在TDS CI部署结束时自动发布Sitecore内容

and*_*cwk 7 continuous-integration sitecore sitecore6 tds

我正在使用Teamcity自动化(单击)部署到我们的QA环境中.目前正在部署内容项目,但QA人员必须手动触发重新发布网站.

无论如何使用TDS,Sitecore Rocks或ANOther工具在部署过程结束时自动重新发布.

我知道我可以将Sitecore配置为每x分钟自动发布一次,但我宁愿将其停用,因为QA也将执行负载测试,我不希望调度程序妨碍.

Jay*_*y S 10

我们通过在我们的每日构建和触发发布的QA网站上设置ASPX来实现此目的.然后构建有一个Powershell调用来触发它.我们使用CruiseControl,TeamCity和Team Build完成了这项工作.

TeamCity配置

在部署文件和TDS之后,TeamCity的配置使用额外的构建步骤:

  1. 跑步者类型: Powershell
  2. 步骤名称:触发器发布到Web DB
  3. Powershell运行模式: x64
  4. 工作目录: [没有价值]
  5. 脚本:源代码
  6. 脚本来源:

    $ r = [System.Net.WebRequest] :: Create('http://myqasite/SomePath/Publish.aspx'); $ resp = $ r.GetResponse();

  7. 脚本执行模式: 使用"-Command - "参数将脚本放入Powershell stdin中

Publish.aspx

我们的发布页面的代码是这样的:

    string full = Request.QueryString["full"];

    // Set up the publish mode
    PublishMode publishMode = PublishMode.Smart;
    if (!string.IsNullOrWhiteSpace(full) && (full == "1" || full.Equals("true", StringComparison.InvariantCultureIgnoreCase)) ) {
        publishMode = PublishMode.Full;
    }

    using (new Sitecore.SecurityModel.SecurityDisabler()) {
        //We need the target database
        var webDb = Sitecore.Configuration.Factory.GetDatabase("web");

        //source db
        var masterDb = Sitecore.Configuration.Factory.GetDatabase("master");

        try {
            foreach (Language language in masterDb.Languages) {
                //loops on the languages and do a full republish on the whole sitecore content tree
                var options = new PublishOptions(masterDb, webDb, publishMode, language, DateTime.Now)
                              {RootItem = masterDb.Items["/sitecore"], RepublishAll = true, Deep = true};
                        var myPublisher = new Publisher(options);
                        myPublisher.Publish();
            }
        }
        catch (Exception ex) {
            Sitecore.Diagnostics.Log.Error("Could not publish the master database to the web", ex);
        }

    }
Run Code Online (Sandbox Code Playgroud)


and*_*cwk 7

在等待答案时,我在twitter上分享了这个问题,这得到了Stephen Pope的指导(他的回复)他建议使用Sitecore Rocks提供的PowerShell增强功能,它需要一段时间(文档在地面很薄)但是我已经取得了以后的成绩:)

作为我发现的记录,以下是作为我自己的问题的潜在答案提供的,虽然非常感谢Jay S,如果不是这个,我会使用的解决方案.

无论如何..在Teamcity构建中使用额外的构建步骤,我有以下内容:

  • 跑步者类型: Powershell
  • 步骤名称:发布网站
  • Powershell运行模式: x64
  • 脚本:源代码
  • 脚本执行模式:使用"-Command - "参数将脚本放入powershell stdin中
  • 其他命令行参数: -ExecutionPolicy Unrestricted
  • 脚本来源:

    import-module'.\ build-modules\sitecore\sitecore.psd1';
    新PSDrive来-name "石头" -psp SitecoreRocks -root "" -host "%QA.Url%" -usr "%QA.sitecore.user%" -pwd "%QA.sitecore.password%" -databasename"主"-scope"剧本";
    set-location rocks:
    Publish-SCDatabase;

当您运行获取帮助表示了一堆参数,发布,SCDatabase命令行中,奇迹发生了,事实证明,只有两个参数是可用的杂牌-模式

在上面的vs-plugins链接之外找到文档是不可能的,因此一些.net反射和良好的patiense表明参数具有以下选项:

  • -Name要运行发布的数据库的名称(默认为psdrive数据库
  • -Mode使用以下可用选项设置comandlet的发布模式:
    • 0:重新发布
    • 1:增量
    • 2:聪明
    • 3:重建

当然更好的文档,并通过获取帮助的命令行开关可能的附加信息将是不错..如果岩石项目是开源的,我很可能已付出了项目产生的额外的帮助.

现在,有两个非常好的解决了这个问题,我会让人民投票决定哪个是最好的答案,过几天我会检查选票和标记最票选为接受的答案.


chr*_*dev 5

惠斯特这些都是很好的解决方案(定制的aspx和通过Rocks的Powershell),它们都有一些缺点.

  1. 自定义aspx页面.除非你在C#解决方案上"去城镇"进行发布,否则提供一种非常复杂的方式来更改发布目标,Root节点和其他选项(例如智能,增量),并允许以尽可能灵活的方式调用这些选项,您可能需要更改代码以定期更改部署策略.Richard R在Rocks下面的评论回答了这一点.与某种脚本解决方案形成对比.它不会被编译成代码的事实有助于被切割和更改,甚至为了不同的目的而扩散到许多不同的脚本中.

  2. 通过岩石的Powershell.同样,在定制方面存在缺点.您仅限于该特定实现支持的命令行开关(以及最终的CRUD操作).更不用说它是封闭源并且文档有限.

我可能需要详细说明我可能需要照顾的用例.如果在部署中仅发布内容树的一部分(/ templates,/ system,/ layouts等方面)对我们来说特别重要怎么办?在我们的部署中,我们拥有大量/内容和/媒体库部分,因此更加细化某些部署的发布内容对于加快部署至关重要.现在,尽管创建自己的/Publish.aspx页面是完全可行的,它将指定Root项目并为您做这些(深层)发布,但通过某种脚本执行它会更加优雅.不仅如此,还要考虑您可能希望在脚本部署和环境设置上自动执行的无数其他操作,例如添加内容,应用工作流等

将这两者与Adam Najmanowicz的Powershell控制台/扩展程序进行对比.通过允许您在sitecore中开发PowerShell脚本,您可以通过脚本化解决方案有效地创建任何您想要的内容,甚至可以从外部工具调用它,以便在CI服务器或协调器中实现这一步: http:// blog.najmanowicz.com/2011/12/19/continuous-deployment-in-sitecore-with-powershell/