从Visual Studio Team Services中的版本部署到私有IIS服务器

战争

完成此处建议的操作:从Visual Studio Online构建部署到私有IIS服务器...构建整个分支时,**/*.sln如何在构建过程中设置自动部署

我尝试过的...

在VS中,我可以获得最新版本的代码,打开一个解决方案,然后...右键单击>发布>选择发布配置文件>部署

我已将我的发布配置文件命名为“ dev”,“ qa”,“生产”之类,它们是指将项目部署到的环境,并且配置文件包含VS部署所需的所有配置信息(通过webdeploy / msdeploy)使用“一键部署”该应用程序。

我希望构建服务器上的Team Services对在构建代码后定义了发布配置文件的项目执行完全相同的操作。

我的理解是我可以像这样添加msbuild args ...

构建步骤-部署

这导致构建的部署部分在构建日志中抛出以下异常...

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets(4288,5): 
Error ERROR_USER_NOT_ADMIN: Web deployment task failed. 
(Connected to 'server' using the Web Deployment Agent Service, but could not authorize. Make sure you are an administrator on 'server'. 
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_NOT_ADMIN.)

如果不是在发布配置文件中定义的用户,这是什么用户?

相关问题:

我向有问题的服务器添加了一个帐户(由于将构建和部署到的服务器是同一台服务器,这使事情变得更加容易),我还向服务器添加了一个名为“ MSDepSvcUsers”的组,并向其中添加了新的帐户和盒子上的管理员组。

然后,我告诉Web部署代理服务和Team Services代理服务都在此帐户下运行(然后重新启动它们)。

不幸的是结果是一样的...我现在真的很想知道我该如何确保用于msdeploy命令的帐户是我期望的,而不必依赖脚本的加载...或者也许这就是Microsoft为何不这样做的原因已将其设置为Team Services中的默认部署步骤选项!

战争

好的,所以我在微软与VSTS团队进行了长时间的交谈,这是长期的还是短暂的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

微软:

我们了解您对这一领域的不满,因此将启动一个大项目来解决此问题

...

我就是我,想出了一些“技巧来实现它”。

我设法弄清楚,由于某种奇怪的原因,构建箱也不能与您要部署的服务器相同(不知道为什么),但是弄​​清楚,我编写了一个简单的控制台应用程序,并获得了微软的一些其他反馈不错。

它甚至可以将进度报告给流程,并且可以将部署中的异常记录为异常,以通过调用“内部命令”(使构建工作以一种向团队敬畏的方式)来使构建失败。

这里有一些技巧,虽然它不是完美的,但希望它能对其他人有所帮助,我称其为“因为它是我的仓库中构建的代码的一部分,因此我可以在构建过程中添加一个步骤来调用它”从构建输出中传递要部署到的环境名称。

实习生将获取所有软件包(按照上面的设置),并使用它们的发布配置文件确定软件包需要存放的位置,然后将它们发送到要部署的正确服务器上。

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;

namespace Deploy
{
    class Program
    {
        static string msDeployExe = @"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe";

        static void Main(string[] args)
        {
            var env = args[0];
            var buildRoot = Path.Combine(Assembly.GetExecutingAssembly().Location.Replace("Deploy.exe", ""), env);
            //var commands = GetCommands(buildRoot);
            var packages = new DirectoryInfo(buildRoot).GetFiles("*.zip", SearchOption.AllDirectories);

            bool success = true;
            for (int i = 0; i < packages.Length; i++)
            {
                if (!Deploy(packages[i], env)) success = false;
                Console.WriteLine("##vso[task.setprogress]" + (int)(((decimal)i / (decimal)packages.Length) * 100m));
            }

            Console.WriteLine("##vso[task.setprogress]100");

            if(success) Console.WriteLine("##vso[task.complete result=Succeeded]");
            else        Console.WriteLine("##vso[task.complete result=SucceededWithIssues]");
        }

        static bool Deploy(FileInfo package, string environment)
        {
            bool succeeded = true;
            Console.WriteLine("Deploying " + package.FullName);
            var procArgs = new ProcessStartInfo
            {
                FileName = msDeployExe,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                Arguments =
                    "-source:package='" + package.FullName + "' " +
                    "-dest:auto,ComputerName='" + environment + ".YourDomain.com',UserName='deployment user',Password='password',AuthType='ntlm',IncludeAcls='False' " +
                    "-verb:sync " +
                    "-disableLink:AppPoolExtension " +
                    "-disableLink:ContentExtension " +
                    "-disableLink:CertificateExtension " +
                    "-setParamFile:\"" + package.FullName.Replace("zip", "SetParameters.xml") + "\""
            };

            try
            {
                Console.WriteLine(msDeployExe + " " + procArgs.Arguments);
                using (var process = Process.Start(procArgs))
                {
                    var result = process.StandardOutput.ReadToEnd().Split('\n');
                    var error = process.StandardError.ReadToEnd();
                    process.WaitForExit();

                    if (!string.IsNullOrEmpty(error))
                    {
                        Console.WriteLine("##vso[task.logissue type=error]" + error);
                        succeeded = false;
                    }

                    foreach (var l in result)
                        if (l.ToLowerInvariant().StartsWith("error"))
                        {
                            Console.WriteLine("##vso[task.logissue type=error]" + l);
                            succeeded = false;
                        }
                        else
                            Console.WriteLine(l);
                }
            }
            catch (Exception ex) {
                succeeded = false;
                Console.WriteLine("##vso[task.logissue type=error]" + ex.Message);
                Console.WriteLine("##vso[task.logissue type=error]" + ex.StackTrace);
            }

            return succeeded;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Azure中的Visual Studio Team Services构建服务器

来自分类Dev

Azure中的Visual Studio Team Services构建服务器

来自分类Dev

从 Visual Studio Team Services 部署到本地 IIS - VPN 连接

来自分类Dev

Visual Studio Team Services(以前是Visual Studio Online)版本无法部署Azure云服务

来自分类Dev

Visual Studio Team Services 中的状态转换

来自分类Dev

将文件从Visual Studio Team Services中的生成服务器提交回存储库

来自分类Dev

Visual Studio Team Services - Waiting for an available agent

来自分类Dev

Visual Studio Team Services:删除存储库

来自分类Dev

Visual Studio Team Services构建通知

来自分类Dev

在Visual Studio Team Services项目之间迁移

来自分类Dev

使用Visual Studio Team Services设置Teamcity

来自分类Dev

Visual Studio Team Services“访问被拒绝”消息

来自分类Dev

Visual Studio中的Team Foundation损坏

来自分类Dev

在Visual Studio Team Services中部署后运行集成测试

来自分类Dev

Visual Studio Team Services未部署某些文件

来自分类Dev

配置Visual Studio Team Services来部署WebJobs

来自分类Dev

Visual Studio Team Services版本失败-外部变量

来自分类Dev

错误交换插槽设置版本管理Visual Studio Team Services

来自分类Dev

如何为Visual Studio Team Services设置符号服务器

来自分类Dev

我可以仅将Visual Studio Team Services用作构建服务器吗?

来自分类Dev

在Visual Studio Team Services中构建和部署(到Azure)ASP.NET 5的简便方法

来自分类Dev

生成计数器-Visual Studio Team Services

来自分类Dev

带有本地计算机的Visual Studio Team Services

来自分类Dev

Visual Studio Team Services中的空构建工件

来自分类Dev

如何在Visual Studio Team Services中创建分支?

来自分类Dev

在Visual Studio Team Services中以Windows用户身份运行

来自分类Dev

在Visual Studio Team Services中更改工作项状态标签

来自分类Dev

更改Visual Studio Team Services中的生成默认值

来自分类Dev

无法从Visual Studio Team Services(是Visual Studio Online)内部版本在远程计算机上执行IIS管理命令

Related 相关文章

  1. 1

    Azure中的Visual Studio Team Services构建服务器

  2. 2

    Azure中的Visual Studio Team Services构建服务器

  3. 3

    从 Visual Studio Team Services 部署到本地 IIS - VPN 连接

  4. 4

    Visual Studio Team Services(以前是Visual Studio Online)版本无法部署Azure云服务

  5. 5

    Visual Studio Team Services 中的状态转换

  6. 6

    将文件从Visual Studio Team Services中的生成服务器提交回存储库

  7. 7

    Visual Studio Team Services - Waiting for an available agent

  8. 8

    Visual Studio Team Services:删除存储库

  9. 9

    Visual Studio Team Services构建通知

  10. 10

    在Visual Studio Team Services项目之间迁移

  11. 11

    使用Visual Studio Team Services设置Teamcity

  12. 12

    Visual Studio Team Services“访问被拒绝”消息

  13. 13

    Visual Studio中的Team Foundation损坏

  14. 14

    在Visual Studio Team Services中部署后运行集成测试

  15. 15

    Visual Studio Team Services未部署某些文件

  16. 16

    配置Visual Studio Team Services来部署WebJobs

  17. 17

    Visual Studio Team Services版本失败-外部变量

  18. 18

    错误交换插槽设置版本管理Visual Studio Team Services

  19. 19

    如何为Visual Studio Team Services设置符号服务器

  20. 20

    我可以仅将Visual Studio Team Services用作构建服务器吗?

  21. 21

    在Visual Studio Team Services中构建和部署(到Azure)ASP.NET 5的简便方法

  22. 22

    生成计数器-Visual Studio Team Services

  23. 23

    带有本地计算机的Visual Studio Team Services

  24. 24

    Visual Studio Team Services中的空构建工件

  25. 25

    如何在Visual Studio Team Services中创建分支?

  26. 26

    在Visual Studio Team Services中以Windows用户身份运行

  27. 27

    在Visual Studio Team Services中更改工作项状态标签

  28. 28

    更改Visual Studio Team Services中的生成默认值

  29. 29

    无法从Visual Studio Team Services(是Visual Studio Online)内部版本在远程计算机上执行IIS管理命令

热门标签

归档