Chef部署Jenkins节点时apt_repository[openjdk-r-ppa]资源SSL验证失败问题求助
解决Chef部署Jenkins节点时apt_repository SSL验证失败的问题
针对你在Ubuntu 16.04上用Chef 12.17.44和java cookbook 3.1.2部署时遇到的apt_repository[openjdk-r-ppa] SSL验证失败问题,我整理了几个实用的解决方案:
方案1:更新系统CA证书并临时跳过SSL验证(应急用)
老版本Ubuntu的CA证书库可能过时,无法验证launchpad的SSL证书链。先手动更新系统证书:
apt-get update && apt-get install -y ca-certificates update-ca-certificates
如果更新后还是失败,可以临时在apt_repository资源里禁用SSL验证(注意:这会降低安全性,仅作为临时应急方案)。你可以在自己的wrapper cookbook里覆盖原资源:
apt_repository 'openjdk-r-ppa' do uri 'ppa:openjdk-r' distribution node['lsb']['codename'] ssl_verify false end
方案2:升级Chef Client版本
Chef 12.17.44是2017年的旧版本,存在不少SSL相关的已知问题。升级到较新的稳定版(比如16.x系列,兼容Ubuntu 16.04)能从根源解决这类问题:
curl -L https://omnitruck.chef.io/install.sh | sudo bash -s -- -v 16.28.14
升级完成后重新运行chef-client即可。
方案3:替换为Ubuntu官方OpenJDK源,弃用第三方PPA
Ubuntu 16.04的官方软件源已经包含了OpenJDK包,完全不需要依赖openjdk-r-ppa这个第三方源。你可以通过设置java cookbook的属性来切换到官方源:
在你的wrapper cookbook的attributes/default.rb里添加:
default['java']['install_flavor'] = 'openjdk' default['java']['openjdk']['package'] = 'openjdk-8-jdk' # 根据需求选择版本 default['java']['openjdk']['use_ppa'] = false
这样java cookbook就不会尝试添加那个有问题的PPA,直接从官方源安装OpenJDK。
额外注意(针对Kitchen测试环境)
如果你是用Test Kitchen测试的话,可以在.kitchen.yml的provisioner环节先执行CA证书更新命令,确保测试节点的证书是最新的:
provisioner: name: chef_zero run_list: - recipe[apt] attributes: apt: update_cache: true custom_config: | execute 'update-system-certs' do command 'apt-get update && apt-get install -y ca-certificates && update-ca-certificates' action :run end
内容的提问来源于stack exchange,提问作者Garry
相关产品推荐
相关产品推荐

