Реестр контейнеров Google и Jenkins
Я пытался настроить Дженкинс для использования Kubernetes, как в учебниках. У меня все работает очень хорошо, но я пытался добавить несколько пользовательских изображений с помощью плагина Kubernetes Jenkins. Кажется, что любые общедоступные изображения работают просто отлично, но когда я создаю изображение и помещаю его в свой личный реестр контейнеров, раб Jenkins с треском проваливается.
Я хотел выяснить, как лучше всего использовать изображения в моем реестре контейнеров в Jenkins. Я нашел это руководство ( https://cloud.google.com/solutions/jenkins-on-container-engine). Когда я попробовал эти шаги, создав образ Дженкинс-Раб и перенес его в репо, это не сработало. Каждый раз, когда он жалуется, раб находится в автономном режиме и недоступен.
2 ответа
Никогда не пробовал гугл контейнерный реестр, но насколько я понимаю, вы можете просто использовать полное имя репо + изображение. Что-то вроде: gcr.io/my_project/image:tag
Убедитесь, что ваши изображения / репо находятся под той же учетной записью службы, что и ваши kubernetes и jenkins в облаке Google!
Когда агент сборки контейнера (старый термин был
slave
) отображается как Offline в Jenkins, это обычно означает, что в файле Jenkins произошла ошибка при использовании Pipeline или возникла проблема с извлечением контейнера образа агента.
Если вы используете плагин Kubernetes, вы увидите ошибку в модуле Kubernetes и в журналах сборки в более новых версиях плагина. Для контейнеров плагинов докеров ошибка может не отображаться в журнале сборки, но будет в журналах докеров.
Обычно это проблема аутентификации или доступа для извлечения образа из реестра.
Если вы используете плагин Jenkins Kubernetes , Pod YAML или Pod Template должен содержатьimagePullSecrets
для реестра контейнеров, из которого вы хотите получить образ контейнера.
Конвейер сценариев Jenkins:
node {
podTemplate(cloud: 'kubernetes', containers: [
containerTemplate(
name: 'mine',
image: 'my-image:v1.2',
ttyEnabled: true,
),
],
imagePullSecrets: [ 'my-credentials-id' ]) {
sh 'run command'
}
}
Декларативный конвейер Jenkins:
pipeline {
agent {
kubernetes {
cloud 'kubernetes'
defaultContainer 'mine'
yaml '''
apiVersion: v1
kind: Pod
metadata:
labels:
build: my-app
spec:
containers:
- name: mine
image: my-image:v1.2
command:
- cat
tty: true
imagePullSecrets:
- name: my-image-pull-cred
'''
}
}
stages {
stage('Run Build') {
steps {
sh 'mvn -version'
}
}
}
}
Если вы используете плагин Docker , вам необходимо определить агент докера.
withRegistry
который позволяет вам передать учетные данные Jenkins для реестра, из которого вы хотите извлечь образ контейнера.
Конвейер сценариев Jenkins:
node {
docker.withRegistry('https://my-registry.gcr.io', 'my-credentials-id') {
docker.image('my-image:v1.2').inside {
sh 'run command'
}
}
}
Декларативный конвейер Jenkins:
pipeline {
agent {
docker {
image 'my-image:v1.0'
registryUrl 'https://my-registry.gcr.io'
registryCredentialsId 'my-credentials-id'
}
}
stages {
stage('Build') {
steps {
sh 'run command'
}
}
}
}