使用 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操作环境构建