是否可以更新在Kubernetes中运行的Jenkins?

问题描述 投票:1回答:1

我正在尝试在Kubernetes中运行Jenkins,但Jenkins的版本已过时。它说我需要Kubernetes插件的至少2.138.4版本。

我正在使用Docker集线器中的this jenkins映像(“ 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有关?

我在这里想念什么/做错了什么?

docker jenkins kubernetes dockerfile jenkins-plugins
1个回答
1
投票

TL; DR

对于update a deployment,您需要基于新的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

根据Images man

您创建Docker映像并将其推送到注册表,然后在Kubernetes容器中引用它。

容器的image属性支持与docker命令相同的语法,包括私有注册表和标签。

因此,您需要部署映像。

更新您的图像

要更新注册表中的图像,请使用docker build -tdocker push

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

它将用更新的jenkins/jeinkis:lts重建图像。然后图像将被上传到container registry

发现在更新群集之前,您正在更新映像版本(例如1.0-> 1.1)。>>

© www.soinside.com 2019 - 2024. All rights reserved.