我在Windows Server 2012 R2上使用Jenkins。我想运行一个构建的工作,并且在强制升级时,它应该告诉远程厨师服务器配方已更改或更新,然后在远程节点上启动chef-client。
我已经安装了Chef Identity Plugin,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运行脚本来运行脚本,我会收到以下信息:
ps1文件包含(让我们称之为' Chef-client.ps1'):
C:\opscode\chefdk\bin\knife cookbook upload MyFirstCookingLesson
C:\opscode\chefdk\bin\knife job start 'chef-client' WIN-COMPNAME
使用执行Windows批处理命令调用Chef-client.ps1:
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似乎在自己的Userprofile中运行,我感觉可能会把所有东西都丢掉。
我已经阅读过如此多的设置博客,但没有任何内容真正告诉我如何明确地设置它。博客或者只是假设它已经完成或使用不同的工具。
我还在Jenkins工作区和“有希望的”中放置了.chef文件夹的副本。 Userprofile空间希望它可以工作。
请有人帮忙指导我吗?
答案 0 :(得分:1)
评论太长了:
所以我也发现Jenkins似乎独自运行 我有一种感觉的Userprofile可能会把所有东西都扔掉。
如果您的jenkins用户无法读取user123 home,那么它无法读取刀配置未正确进行身份验证,因为它无法读取geoff.pem文件。
解决此问题的一个解决方案是将配置,密钥等放在特定目录中,并使用刀的-c
选项为其提供conf文件的路径。另一种选择是使用KNIFE_HOME
环境变量,但在Jenkins中它不那么容易且容易出错。