Jenkins Kubernetes构建用户权限问题

umuewwlo  于 2023-01-12  发布在  Jenkins
关注(0)|答案(1)|浏览(241)

我尝试做一些ssh + git子模块构建,最初我在尝试拉取代码时遇到这个错误:

Submodule 'xxx' (git@host:thing/subdir/repo.git) registered for path 'repo'
Submodule 'yyy' (git@host:thing/subdir/yyy.git) registered for path 'yyy'
Cloning into '/home/jenkins/agent/workspace/thing/AAA/releaser/xxx'...
No user exists for uid 1000
fatal: Could not read from remote repository.

这让我想到了这个解决方案:

securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop:
            - all
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 65534

现在,这工作,但我看到一些非关键错误,无法保存主机键到/.ssh,但它仍然 checkout 代码,所以我不在乎,因为每次运行就像它的第一次。
但是,我现在遇到了一个不同的问题,确实需要我永久地解决这个用户问题:

+ mc alias set jenkins-user ****
mc: <ERROR> Unable to save new mc config. mkdir /.mc: permission denied.

我需要运行minio mc客户端-当我给予它creds时,它试图将它们保存到/.mc,但它不能,别名命令失败,整个构建也失败。
因此,我需要找出一个更好的方法来解决初始用户问题,或者告诉它,当在这个pod中运行时,使用一个非特权目录,如/tmp。
因此,如果有人能提供帮助,我愿意为任何一个问题提供解决方案

o8x7eapl

o8x7eapl1#

好吧,我最终解决了它与Kubernetes的变化和Dockerfile的变化混合。
首先,我必须将具有正确用户ID的Jenkins用户添加到包含所需内容的自定义Docker映像中

FROM minio/mc

RUN  \
     microdnf update --nodocs && \
     microdnf install git zip findutils --nodocs && \
     microdnf clean all
RUN adduser --home-dir /home/jenkins/ --shell /bin/sh --uid 1000 jenkins

USER jenkins
WORKDIR /home/jenkins

ENTRYPOINT ["sh"]

然后,我不得不更新pod定义,使其在之前抱怨的同一用户下运行:

apiVersion: v1
kind: Pod
metadata:
  annotations: {}
spec:
  securityContext:
    allowPrivilegeEscalation: false
    runAsUser: 1000
  containers:
    -
      name: releaser
      image: docker.io/chb0docker/releaser:latest
      imagePullPolicy: Always
      command:
        - cat
      tty: true

相关问题