当前位置: 首页 > 知识库问答 >
问题:

在minikube中,带有自定义docker图像的Jenkins奴隶与主人没有连接

谭学名
2023-03-14

总结:Jenkins在K8s minikkube中工作良好,在缺省jnlp代理的情况下伸缩性良好,但在自定义jnlp映像的情况下坚持“等待代理连接”。

详细说明:

我在和詹金斯一起经营当地的迷你库贝。

詹金斯大师DockerFile:

from jenkins/jenkins:alpine

# Distributed Builds plugins
RUN /usr/local/bin/install-plugins.sh ssh-slaves

# install Notifications and Publishing plugins
RUN /usr/local/bin/install-plugins.sh email-ext
RUN /usr/local/bin/install-plugins.sh mailer
RUN /usr/local/bin/install-plugins.sh slack

# Artifacts
RUN /usr/local/bin/install-plugins.sh htmlpublisher

# UI
RUN /usr/local/bin/install-plugins.sh greenballs
RUN /usr/local/bin/install-plugins.sh simple-theme-plugin

# Scaling
RUN /usr/local/bin/install-plugins.sh kubernetes

# install Maven
USER root
RUN apk update && \
    apk upgrade && \
    apk add maven
USER jenkins
 apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: jenkins
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: jenkins
        spec:
          containers:
            - name: jenkins
              image: ybushnev/my-jenkins-image:1.3
              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: {}
apiVersion: v1
kind: Service
metadata:
  name: jenkins
spec:
  type: NodePort
  ports:
    - port: 8080
      name: "http"
      targetPort: 8080
    - port: 50000
      name: "slave"
      targetPort: 50000
  selector:
    app: jenkins
Yuris-MBP-2% kubectl get services       
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                          AGE
jenkins      NodePort    10.108.30.10   <none>        8080:30267/TCP,50000:31588/TCP   1h
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP                          1h
Yuris-MBP-2%  kubectl cluster-info | grep master
Kubernetes master is running at https://192.168.99.100:8443

Waiting for agent to connect (41/100): kubernetes-agent-tgskx
Waiting for agent to connect (42/100): kubernetes-agent-tgskx
Waiting for agent to connect (43/100): kubernetes-agent-tgskx
Waiting for agent to connect (44/100): kubernetes-agent-tgskx
Waiting for agent to connect (45/100): kubernetes-agent-tgskx

詹金斯容器好像是绿色的。在K8s中没有日志,但发生了这样的事件:

Successfully assigned kubernetes-agent-517tl to minikube
MountVolume.SetUp succeeded for volume "workspace-volume"
MountVolume.SetUp succeeded for volume "default-token-8sgh6"

重要如果我不把'jnlp'放在容器名称中(我想这是重要的,因为在另一种情况下,它需要一些默认的jnlp代理映像),从机会旋转并连接到主机,但即使我在'docker image'字段中有自定义docker image',它也不会把它作为引用,因为我可以看到Jenkins从机没有它认为基于提供的映像的工具/文件。上次我尝试使用这个映像:“gcr.io/cloud-solutions-images/jenkins-k8s-slave”,但对于我来说,如果我将'jnlp'作为容器模板名称,那么它对任何映像都失败了。我试着玩很多图像,但运气不好...会很高兴得到任何提示!

共有1个答案

伍胡媚
2023-03-14

我想你应该为你的jenkins大师设置开始新豆荚的凭据。

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: jenkins
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get","list","watch"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: jenkins
subjects:
- kind: ServiceAccount
  name: jenkins

然后在您的部署中使用帐户:

spec:           
      serviceAccountName: jenkins

看看我以前的回答,网址是https://stackoverflow.com/a/47874390/2718151

 类似资料:
  • 问题内容: 我正在寻找一种在Jenkins奴隶内部动态(按需)启动docker来运行Jenkins作业/构建的方法。附加架构以进行视觉理解。我实际上正在寻找的内容和流程如下所示: 1)触发Jenkins作业(手动/ git / gerrit) 2)Jenkins主服务器(在docker中运行)启动从属机器docker(并传递构建的脚本/指令) 3)构建在Jenkins从属(或从属设备,如果并行/管

  • 我想知道以下情况是否可能,请帮助我:- 情景1:- 我把我的本地系统作为Jenkins主系统,每次我需要一个从系统来运行自动化测试脚本时,docker容器就会作为Jenkins从系统旋转起来,我的脚本就会在从系统上执行,执行完成后容器就会被销毁。 我可以旋转多个容器作为Jenkins从本地系统作为Jenkins主。 谢谢

  • 当主人倒下的时候,它不应该被降级为奴隶吗?有了这一点,当它再次升起时,它将立即成为奴隶。我知道(自从Redis2.8?)配置重写功能使得Redis实例关闭时不能修改配置。 在一段时间内有两个主服务器对我来说是一个问题,因为在这么短的时间内,HaProxy不是向一个主服务器Redis发送请求,而是在这两个主服务器之间进行负载平衡。 有没有办法把失败的主人立即降级为奴隶?

  • 问题 我已经将Csanchez的jenkins-kubernetes插件(版本0.12)部署到本地的Minikube/Kubernetes环境中。在Jenkins UI中配置pod模板和容器模板时,pod会自动生成并处理简单的作业。然而,当POD模板和容器模板在管道脚本中定义时,Jenkins Master拒绝连接,称POD已经连接到Master。 环境 minikube版本:V0.20.0 Ku

  • 问题内容: 当我需要定制我的UIPageControl解决方案。 为新版本的swift稍微修改一下即可: 我的问题是,当您第一次启动应用程序时,我无法更改图片。仅在页面更改时更改。 在中,我添加了和,但没有结果。我可能做错了什么? 问题答案: Swift 3.0 …您知道是否可以接受声明的风险:“修改现有控件的子视图很脆弱”。 您将必须在viewDidAppear()中调用“ updateDots

  • 然而,在我创建了另一个docker服务器并创建了其中两个服务器的群并再次尝试运行jenkins jobs之后,它仍然只在原始服务器(现在也是一个管理器)上部署容器。我希望swarm能够平衡负载,并在swarm中均匀地分配新创建的容器。我错过了什么? 也许我必须使用服务吗?