AWS opsworks 上的 chef 12 脚本无法安装 jenkins

Posted

技术标签:

【中文标题】AWS opsworks 上的 chef 12 脚本无法安装 jenkins【英文标题】:chef 12 script on AWS opsworks failing to install jenkins 【发布时间】:2017-06-17 16:51:23 【问题描述】:

我有以下 chef 12 脚本,我在 aws opsworks 上运行它来安装 jenkins。我从以下站点获取它:https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu 当我运行它时,它失败并出现以下错误:

execute 'add jenkins source to apt' do
    command "wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -"
end


file '/etc/apt/sources.list.d/jenkins.list' do
    content 'deb http://pkg.jenkins.io/debian-stable binary/'
end

execute 'update apt-get' do
    command 'apt-get update'
end


package 'install Jenkins' do
    package_name "jenkins"
end

package 'install nginx' do
    package_name 'nginx'
end

file '/etc/nginx/sites-enabled/default' do
    action :delete
end

cookbook_file '/etc/nginx/sites-available/jenkins' do
    source 'jenkins'
end

link '/etc/nginx/sites-enabled/jenkins' do
    to '/etc/nginx/sites-available/jenkins'
    link_type :symbolic
end

service 'nginx' do
    action :restart
end

service 'jenkins' do
    action :restart
end

当我在运行 ubuntu 14.04 的 c4.4xlarge 映像上运行执行配方时,我收到以下错误

Setting up jenkins (2.32.1) ...
* Starting Jenkins Continuous Integration Server jenkins
...fail!
Setting up libnss3-nssdb (2:3.26.2-0ubuntu0.14.04.3) ...

STDERR: invoke-rc.d: initscript jenkins, action "start" failed.
dpkg: error processing package jenkins (--configure):
subprocess installed post-installation script returned error exit status 7
Errors were encountered while processing:
jenkins
E: Sub-process /usr/bin/dpkg returned an error code (1)
---- End output of apt-get -q -y install jenkins=2.32.1 ----
Ran apt-get -q -y install jenkins=2.32.1 returned 100

Resource Declaration:
---------------------
# In /var/chef/runs/55bf900b-16e6-4573-9948-8571284d80e7/local-mode-cache/cache/cookbooks/jenkins/recipes/default.rb

16: package 'install Jenkins' do
17:     package_name "jenkins"
18: end
19: 

Compiled Resource:
------------------
# Declared in /var/chef/runs/55bf900b-16e6-4573-9948-8571284d80e7/local-mode-cache/cache/cookbooks/jenkins/recipes/default.rb:16:in `from_file'

apt_package("install Jenkins") do
package_name "jenkins"
action [:install]
retries 0
retry_delay 2
default_guard_interpreter :default
declared_type :package
cookbook_name "jenkins"
recipe_name "default"
end

Platform:
---------
x86_64-linux

[2017-02-01T03:10:08+00:00] INFO: Running queued delayed notifications before re-raising exception
[2017-02-01T03:10:08+00:00] ERROR: Running exception handlers
[2017-02-01T03:10:08+00:00] ERROR: Exception handlers complete
[2017-02-01T03:10:08+00:00] FATAL: Stacktrace dumped to /var/chef/runs/55bf900b-16e6-4573-9948-8571284d80e7/local-mode-cache/cache/chef-stacktrace.out
[2017-02-01T03:10:08+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2017-02-01T03:10:08+00:00] ERROR: apt_package[install Jenkins] (jenkins::default line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '100'

我不确定 jenkins 无法启动的原因。当我在同一个实例上运行两次配方时,它第二次成功。非常感谢任何帮助,因为这是我的第一个 Chef 脚本。

【问题讨论】:

Jenkins 安装有official cookbook。您是否尝试过查看 Jenkins 日志? (通常是/var/log/jenkins)或apt-get -q -y install jenkins=2.32.1 的输出? 您的apt-get 失败。尝试自己运行它,看看会发生什么。 检查 jenkins 日志,这是失败的安装后脚本。根据this,它可能是 /tmp 的权限 如果它在第二次运行中可靠地成功,那么您的配方存在时间问题。在或有流程完成(下载或安装需求)或资源以您未预料到的顺序运行之前,某些事情就开始了。尝试确定您需要的资源是什么,并使用notifies 语句docs.chef.io/resource_common.html#notifications 控制时间。 【参考方案1】:

原来答案在厨师堆栈跟踪文件中。 apt-get 进程运行两次,在安装包步骤中无法访问 dpkg 中的锁定文件。改变

execute 'update apt-get' do
    command 'apt-get update'
end


package 'install Jenkins' do
    package_name "jenkins"
end

apt_update 'all platforms' do
    action :update
end

apt_package 'jenkins' do
  action :install
end

解决了这个问题。

【讨论】:

以上是关于AWS opsworks 上的 chef 12 脚本无法安装 jenkins的主要内容,如果未能解决你的问题,请参考以下文章

特定的 nodejs 版本,opsworks_ruby,aws,chef 12

如何在 MacOS 中安装 chef 12 以部署到 AWS Opsworks?

无法在 AWS Opsworks 上使用 Chef 12 查找 Chef 社区食谱

使用 Chef 12 从 AWS OpsWorks 中的堆栈设置获取自定义 JSON

Chef 12 + AWS Opsworks + 从 s3 部署应用程序

AWS Opsworks 中的 Chef 环境