Я пытаюсь установить Jenkins с Puppet, используя манифесты ниже.
# init.pp
class jenkins {
include jenkins::install, jenkins::service
}
# service.pp
class jenkins::service {
service { "jenkins":
ensure => running,
hasstatus => true,
hasrestart => true,
enable => true,
require => Class["jenkins::install"],
}
}
# install.pp
class jenkins::install {
include jenkins::install::repo
include jenkins::install::java
package { "jenkins":
ensure => present,
require => Class['jenkins::install::repo','jenkins::install::java'],
}
}
# install/repo.pp
class jenkins::install::repo {
file { "/etc/pki/rpm-gpg/jenkins-ci.org.key":
owner => root,
group => root,
mode => 0600,
source => "puppet:///jenkins/jenkins-ci.org.key"
}
yumrepo { "jenkins":
baseurl => "http://pkg.jenkins-ci.org/redhat",
descr => "Jenkins",
enabled => 1,
gpgcheck => 1,
gpgkey => "file:///etc/pki/rpm-gpg/jenkins-ci.org.key",
require => File["/etc/pki/rpm-gpg/jenkins-ci.org.key"]
}
}
# install/java.pp
class jenkins::install::java {
package { "java-1.6.0-openjdk":
ensure => present,
}
}
Репо добавляется, и ключ записывается в файловую систему. Однако я получаю следующую ошибку.
err: /Stage[main]/Jenkins::Install/Package[jenkins]/ensure: change from absent to present failed: Execution of '/usr/bin/yum -d 0 -e 0 -y install jenkins' returned 1: warning: rpmts_HdrFromFdno: Header V4 DSA signature: NOKEY, key ID d50582e6
Traceback (most recent call last):
File "/usr/bin/yum", line 29, in ?
yummain.user_main(sys.argv[1:], exit_code=True)
File "/usr/share/yum-cli/yummain.py", line 309, in user_main
errcode = main(args)
File "/usr/share/yum-cli/yummain.py", line 261, in main
return_code = base.doTransaction()
File "/usr/share/yum-cli/cli.py", line 410, in doTransaction
if self.gpgsigcheck(downloadpkgs) != 0:
File "/usr/share/yum-cli/cli.py", line 510, in gpgsigcheck
self.getKeyForPackage(po, lambda x, y, z: self.userconfirm())
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 3519, in getKeyForPackage
keys = self._retrievePublicKey(keyurl, repo)
File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 3484, in _retrievePublicKey
keys_info = misc.getgpgkeyinfo(rawkey, multiple=True)
File "/usr/lib/python2.4/site-packages/yum/misc.py", line 375, in getgpgkeyinfo
raise ValueError(str(e))
ValueError: unknown pgp packet type 17 at 706
Это говорит мне о том, что ключ не импортируется успешно, и rpm -qa gpg-pubkey
не показывает ключ. Если я вручную yum install jenkins
без импортированного ключа я получаю ту же ошибку. После импорта ключа установка вручную завершится успешно.
Я успешно устанавливаю другие репозитории yum и отдельные ключи (в основном install/repo.pp
manifest как отдельный модуль), например EPEL, но поскольку это репо предназначено только для Jenkins, я хотел включить его в свой модуль Jenkins.
Что-то не так с моими манифестами? Или какая-то другая проблема?
ОБНОВИТЬ:
Следующий манифест приводит к установке репозиториев jenkins и epel, rpm -qa gpg-pub*
показывает ключ epel, но не ключ jenkins, и git установлен, но не jenkins.
class jenkins {
yumrepo {"jenkins":
baseurl => "http://pkg.jenkins-ci.org/redhat",
descr => "Jenkins",
enabled => 1,
gpgcheck => 1,
gpgkey => "http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key",
}
package {"jenkins":
ensure => latest,
require => Yumrepo["jenkins"]
}
}
class git {
yumrepo {"epel":
baseurl => "http://mirror.aarnet.edu.au/pub/epel/5/i386",
descr => "Extra Packages for Enterprise Linux (EPEL)",
enabled => 1,
gpgcheck => 1,
gpgkey => "http://keys.gnupg.net:11371/pks/lookup?search=0x217521F6&op=get",
}
package {"git":
ensure => latest,
require => Yumrepo["epel"]
}
}
include jenkins
include git
ОБНОВИТЬ:
Должны были быть включены версии программного обеспечения:
Я протестировал ваш упрощенный манифест на:
Оба репозитория успешно добавлены.
Судя по сообщению об ошибке, похоже, что сообщение об ошибке исходит от yum, а не от марионетки или чего-то еще.
Можете ли вы дать аналогичное описание вашей среды? Вероятно, наиболее важным является версия yum.
Попробуйте обновить его до версии не ниже 3.2.29 (последняя стабильная версия 3.2.x). Журнал изменений Вот, ссылается на некоторые значительные исправления относящиеся к ключам GPG.
Похоже, что у rpm есть проблемы с импортом ключа Jenkins, потому что он содержит изображение JPEG.
http://tools.ietf.org/html/rfc4880
Тип пакета 17 - это изображение:
http://tools.ietf.org/html/rfc4880#section-5.12
> gpg --list-keys D50582E6 pub 1024D/D50582E6 2009-02-01 uid Kohsuke Kawaguchi uid Kohsuke Kawaguchi uid [jpeg image of size 3704] sub 2048g/10AF40FE 2009-02-01
Кажется, что RPM не знает, что с этим делать.
> sudo rpm --import jenkins-ci.org.key [sudo] password for me: error: jenkins-ci.org.key: import read failed(-1).
Поиск в Google известных проблем с RPM не обнаруживает ничего очевидного, но, возможно, это дает вам направление.
Это супер постфактум, но вот что я в итоге сделал:
if ($::operatingsystemmajrelease == '5'){
exec { 'EL5 Jenkins Key Workaround':
command => 'rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key',
unless => "rpm -qa --nodigest --nosignature --qf '%{VERSION}-%{RELEASE} %{SUMMARY}\n' | grep d50582e6",
path => ['/bin', '/usr/bin'],
}
}
Я добавил PR, чтобы добавить этот обходной путь в официальный модуль:
https://github.com/jenkinsci/puppet-jenkins/pull/344/files
Более длинная поломка здесь:
http://dan.carley.co/blog/2012/05/22/yum-gpg-keys-for-jenkins/
Вероятно, вам нужно будет добавить и rpm --import <PUBKEY>
в вашем манифесте.
Справочная документация по типу Exec: Вот.
Возможно, вы можете попробовать добавить assumeyes=1
в файл репо, вместе с опцией gpgkey это должно добавить ключ автоматически.