【问题标题】:How to setup Jenkins to use Knife in a Powershell script如何设置 Jenkins 在 Powershell 脚本中使用 Knife
【发布时间】:2015-12-10 20:29:37
【问题描述】:

我在 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 运行它来运行脚本,我会得到以下信息:

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 似乎在其自己的用户配置文件中运行,我觉得这可能会把所有东西都扔掉。

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

我还在 Jenkins 工作区和“有希望的”用户配置文件空间中放置了 .chef 文件夹的副本,希望它能正常工作。

请任何人帮助指导我吗?

【问题讨论】:

    标签: powershell jenkins chef-infra knife


    【解决方案1】:

    评论太长了:

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

    如果您的 jenkins 用户无法读取 user123 主页,则它不可能读取不正确身份验证的刀配置,因为它无法读取 geoff.pem 文件。

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

    【讨论】:

    • 很抱歉。我已将错误消息上移以便更好地阅读。我假设 -vv 不是(双 u)并且它假设是 -V?如果我使用 -vv 则成功,如果我使用 -W 则表示它不是有效参数。
    • 加倍 V 导致刀更冗长,我的意思是你向我们展示了一个你说你已经修复的错误,这听起来对你没有帮助
    • 很抱歉给您带来了困惑。该错误消息是我从正在运行的第二个脚本中得到的错误消息。它抱怨没有Knife配置文件。
    • 在这种情况下,如果我的回答给出了第一部分,这是 Jenkins 用户访问另一个用户主目录中的文件的权限问题。
    • 我个人使用特定目录并使用 -c 选项将路径传递给刀(这也允许我为开发和生产组织提供两个配置)
    猜你喜欢
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多