Есть ли способ обновить Jenkins, работающий в Kubernetes? - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь запустить Jenkins в Kubernetes, но версия Jenkins устарела. Он говорит, что мне нужна по крайней мере версия 2.138.4 для плагина Kubernetes.

Я использую это изображение Дженкинса из Docker хаба ("jenkins / jenkins: lts"). Но когда я пытаюсь запустить это в Kubernetes, он говорит, что версия 2.60.3. Ранее я использовал действительно старую версию Jenkins (2.60.3), но я обновил свой Dockerfile, чтобы использовать последний образ. После этого я снова создаю образ и бросаю его в Kubernetes. Я даже удаляю свое развертывание и обслуживание в Kubernetes, прежде чем развертывать их снова. В настоящее время я работаю в среде разработки с использованием Minikube.

Dockerfile:

FROM jenkins/jenkins:lts

ENV JENKINS_USER admin
ENV JENKINS_PASS admin

# Skip initial setup
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false


COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/plugins.txt
USER root
RUN apt-get update \
  && apt-get install -qqy apt-transport-https ca-certificates curl gnupg2 software-properties-common 
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
RUN add-apt-repository \
  "deb [arch=amd64] https://download.docker.com/linux/debian \
  $(lsb_release -cs) \
  stable"
RUN apt-get update  -qq \
  && apt-get install docker-ce -y
RUN usermod -aG docker jenkins
RUN apt-get clean
RUN curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
USER jenkins 

Развертывание Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
        - name: jenkins
          image: mikemanders/my-jenkins-image:1.0
          env:
            - name: JAVA_OPTS
              value: -Djenkins.install.runSetupWizard=false
          ports:
            - name: http-port
              containerPort: 8080
            - name: jnlp-port
              containerPort: 50000
          volumeMounts:
            - name: jenkins-home
              mountPath: /var/jenkins_home
      volumes:
        - name: jenkins-home
          emptyDir: {}

И служба Kubernetes:

apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  selector:
    app: jenkins
  ports:
    - port: 8080
      targetPort: 8080

Я думаю, что моя конфигурация Kubernetes хорошая, поэтому я предполагаю, что это как-то связано с Docker?

Что я здесь упускаю / делаю неправильно?

1 Ответ

1 голос
/ 28 апреля 2020

TL; DR

Чтобы обновить развертывание , вам необходим новый Docker образ на основе нового выпуска Jenkins:

docker build -t mikemanders/my-jenkins-image:1.1 .
docker push mikemanders/my-jenkins-image
kubectl set image deployment/jenkins mikemanders/my-jenkins-image=1.1 --record

Kubernetes развертывает images не dockerfiles

Согласно Изображения man

Вы создаете Docker образ и pu sh его в реестр перед ссылкой на него в модуле Kubernetes.

Свойство контейнера image поддерживает тот же синтаксис, что и команда docker, включая частные реестры и теги.

Итак, вам нужно изображение для развертывания.

Обновите ваше изображение

Чтобы обновить ваш образ в реестре, используйте docker build -t и docker push:

docker build -t mikemanders/my-jenkins-image:1.1
docker push mikemanders/my-jenkins-image

It восстановит изображение с обновленным jenkins/jeinkis:lts. Затем образ будет загружен в реестр контейнеров .

. Подвох в том, что вы обновляете версию образа (например, 1.0 -> 1.1) перед обновлением кластера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...