如何设置 Jenkins 在 Powershell 脚本中使用 Knife

How to setup Jenkins to use Knife in a Powershell script

我在 Windows Server 2012 R2 上使用 Jenkins。我想要 运行 一个构建的工作,并且在强制升级时它应该告诉远程厨师服务器食谱已经更改或更新,然后在远程节点上启动厨师客户端。

我已经安装了 Chef Identity 插件、Promoted-builds 插件、MSbuild 插件、TFS-4.0.0 插件和 Deploy 插件

到目前为止,构建工作和促销工作。 我已经设置了强制升级,两个 Powershell 脚本应该 运行。 第一个工作正常,它只做基本的数据管理和文件命名。

但是第二个说失败了,但是推广还是通过了,根本没有证据证明有效。

我明确使用了 Knife 的路径,因为当我不使用它时,Jenkins 给出了一个错误:

WARNING: No knife configuration file found
ERROR: Could not find cookbook MyFirstCookingLesson in your cookbook path, skipping it
ERROR: ArgumentError: Cannot sign the request without a client name, check that :node_name is assigned

如果我添加 -V 标志和 运行 通过右键单击脚本并 运行 在 Jenkins 工作中使用 Powershell 将其 space 我得到以下信息:

ps1 文件包含(让我们称之为 'Chef-client.ps1'):

C:\opscode\chefdk\bin\knife cookbook upload MyFirstCookingLesson
C:\opscode\chefdk\bin\knife job start 'chef-client' WIN-COMPNAME

Chef 客户端。ps1 使用执行 Windows 批处理命令调用:

cd C:\chef-source\cookbooks
PowerShell.exe -File  C:\chef-source\cookbooks\Chef-client.ps1

我还在 Jenkins 凭据中设置了 Chef 身份,如下所示:

Identity name: geoff
user.pem key : <a whole bunch of secret stuffs and gibberish>

knife.rb : 

log_level :info
log_location STDOUT
node_name 'geoff'
client_key 'C:/Users/user123/.chef/geoff.pem'
validation_client_name  'geoff.pem'
validation_key 'C:/Users/user123/.chef/secretName-validator.pem'
chef_server_url 'https://secretLocation.268lab.local/organizations/secretName/'
syntax_check_cache_path 'C:/Users/user123/.chef/syntax_check_cache'
cookbook_path [ 'c:/chef-source/cookbooks/' ]
http_proxy 'http://22.151.32.85:3128'
https_proxy 'http://22.151.32.85:3128'
no_proxy 'secretLocation.268lab.local'
knife[:editor] = '"C:\Program Files (x86)\Notepad++\notepad++.exe"';

所以我还发现 Jenkins 似乎 运行 在它自己的用户配置文件中,我觉得它可能会把所有东西都扔掉。

我已经阅读了很多设置博客,但没有任何内容真正告诉我如何明确地进行设置。这些博客要么假设它已经完成,要么使用不同的工具。

我还在 Jenkins Workspace 和 'hopeful' Userprofile space 中放置了 .chef 文件夹的副本,希望它能起作用。

请问有人能帮我指导一下吗?

评论太长:

So I have also found out that Jenkins seems to run in its own Userprofile which I have a feeling might be throwing everything off.

如果你的 jenkins 用户无法读取 user123 home,它就不可能读取 knife 配置,因为它无法读取 geoff.pem 文件,因此无法正确验证。

解决此问题的一个解决方案是将配置、密钥等放在特定目录中,并使用 knife 的 -c 选项为其提供 conf 文件的路径。另一种选择是使用 KNIFE_HOME 环境变量,但它在 Jenkins 中不太容易且容易出错。