Реестр контейнеров 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'
      }
    }
  }
}
Другие вопросы по тегам