使用 Ansible 自动配置 Octopus Tentacle

Posted

技术标签:

【中文标题】使用 Ansible 自动配置 Octopus Tentacle【英文标题】:Auto Configure Octopus Tentacle using Ansible 【发布时间】:2016-03-23 11:15:59 【问题描述】:

我有一本运行 PowerShell 脚本来配置 Octopus Deploy Tentacle 的剧本。

如果我在服务器上运行这个 PowerShell 脚本,它可以完美运行。如果我使用 PowerShell 脚本运行 playbook,它会在服务器上失败。

这可能是什么原因造成的?权限?超时?

Playbook:
---
- name: Configure Octopus Deploy Tentecle
  hosts: all
  tasks:
    - name: Configure Octopus Deploy Tentecle
      script: files/octo_autoconfig.ps1

PowerShell 脚本:

& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" create-instance --instance "Tentacle" --config "C:\Octopus\Tentacle.config" --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" new-certificate --instance "Tentacle" --if-blank --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" configure --instance "Tentacle" --reset-trust --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" configure --instance "Tentacle" --home "C:\Octopus" --app "C:\Octopus\Applications" --port "10933" --noListen "False" --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" configure --instance "Tentacle" --trust "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --console;
& "C:\Program Files\Octopus Deploy\Tentacle\Tentacle.exe" service --instance "Tentacle" --install --start --console;

在运行 playbook 配置 Octopus 后尝试打开 Octopus Tentacle 时出现错误:

System.NullReferenceException: Object reference not set to an instance of an object.
   at Octopus.Tools.TentacleConfiguration.TentacleManager.TentacleManagerModel.Reload(ApplicationInstanceRecord applicationInstance) in y:\work\refs\heads\master\source\Octopus.Tools\TentacleConfiguration\TentacleManager\TentacleManagerModel.cs:line 131
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

请注意,如果我直接在服务器上运行 PowerShell 脚本,它会完美运行并配置触手。如果我然后移除触手然后运行它的剧本。因此,就好像需要先在服务器上直接配置触手,然后 Ansible 剧本才能工作。哪一种不符合重点。

我查看了服务器的事件查看器,发现有一些拒绝访问错误,如下所示。

有没有办法让特定的管理员用户运行这个脚本,这样就不会出现拒绝访问错误?

2016-02-24 15:53:12.2675      1 FATAL  System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at Octopus.Shared.Internals.CertificateGeneration.Win32ErrorHelper.ThrowExceptionIfGetLastErrorIsNotZero() in y:\work\refs\heads\master\source\Octopus.Shared\Internals\CertificateGeneration\Win32ErrorHelper.cs:line 13
   at Octopus.Shared.Internals.CertificateGeneration.CryptContext.Open() in y:\work\refs\heads\master\source\Octopus.Shared\Internals\CertificateGeneration\CryptContext.cs:line 38
   at Octopus.Shared.Security.CertificateGenerator.Generate(String fullName, Boolean exportable) in y:\work\refs\heads\master\source\Octopus.Shared\Security\CertificateGenerator.cs:line 27
   at Octopus.Shared.Configuration.TentacleConfiguration.GenerateNewCertificate() in y:\work\refs\heads\master\source\Octopus.Shared\Configuration\TentacleConfiguration.cs:line 188
   at Octopus.Tentacle.Commands.NewCertificateCommand.Start() in y:\work\refs\heads\master\source\Octopus.Tentacle\Commands\NewCertificateCommand.cs:line 58
   at Octopus.Shared.Startup.AbstractCommand.Octopus.Shared.Startup.ICommand.Start(String[] commandLineArguments, ICommandRuntime commandRuntime, OptionSet commonOptions) in y:\work\refs\heads\master\source\Octopus.Shared\Startup\AbstractCommand.cs:line 58
   at Octopus.Shared.Startup.ConsoleHost.Run(Action`1 start, Action shutdown) in y:\work\refs\heads\master\source\Octopus.Shared\Startup\ConsoleHost.cs:line 36

【问题讨论】:

【参考方案1】:

我认为您在新证书步骤中遇到了此错误。

http://docs.octopusdeploy.com/display/OD2/Export+and+import+Tentacle+certificates+without+a+profile

您需要生成证书并将其上传到目标以使用触手导入。

【讨论】:

以上是关于使用 Ansible 自动配置 Octopus Tentacle的主要内容,如果未能解决你的问题,请参考以下文章

运维自动化|系统运维|Ansible的安装及配置使用

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

Ansible自动化配置实战

Ansible 运维自动化--配置管理工具