ビルドを実行するためにGKEでJenkinsイメージをホストしようとしています。大抵、私はGoogle's tutorial for setting up Jenkins in Kubernetesに続いた。ビルドを実行する1つのマスターノードで、かなり基本的な設定ができました。docker.sockの使用中にKubernetesでJenkinsをホスティングする
また、Jenkins環境内でDockerを使用できるようにするため、Jenkinsのグローバルツール設定に入り、Dockerインスタンスを追加しました。私はさらに、「unix:///var/run/docker.sockでDockerデーモンに接続できません.Dockerデーモンが実行されていますか?」を回避するために、展開ファイルにdocker.sockをマップしました。問題。
私の現在の展開は、次のようになります。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
namespace: jenkins
spec:
replicas: 1
template:
metadata:
labels:
app: master
spec:
containers:
- name: master
image: jenkins/jenkins:2.95
ports:
- containerPort: 8080
- containerPort: 50000
readinessProbe:
httpGet:
path: /login
port: 8080
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 2
failureThreshold: 5
env:
- name: JENKINS_OPTS
valueFrom:
secretKeyRef:
name: jenkins
key: options
- name: JAVA_OPTS
value: '-Xmx1400m'
volumeMounts:
- mountPath: /var/jenkins_home
name: jenkins-home
- mountPath: /var/run/docker.sock
name: docker-socket
securityContext:
privileged: true
resources:
limits:
cpu: 500m
memory: 1500Mi
requests:
cpu: 500m
memory: 1500Mi
volumes:
- name: jenkins-home
gcePersistentDisk:
pdName: jenkins-home
fsType: ext4
partition: 1
- name: docker-socket
hostPath:
path: /var/run/docker.sock
残念ながら、いずれかが次のエラーで失敗構築します。このエラーを含む
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock:
....
dial unix /var/run/docker.sock: connect: permission denied
ほとんどのGoogle検索はKubernetes-ように見えるしていないように見えます関連する
私には何が欠けていますか?
spec:
replicas: 1
template:
metadata:
labels:
app: master
spec:
securityContext:
runAsUser: 0
containers:
基本的にrootとしてジェンキンスを実行します:
アップデート:私は、この設定を使用する場合は、ある程度までが、これは良い作品。残念ながら、これは、パイプラインが認証情報を管理する方法にいくつかの影響を与えます。 「withRepository(repoName、credentialId)」を使用しようとすると、パイプラインによって/var/jenkins_home/.dockercfg
にエントリが追加されますが、後でドッキングするプッシュステップではこれらの資格情報が見つからないようです(後のステップでは/root/.dockercfg
または/root/.docker/config.json
)。
Aha! "runAsUser 0"と別のsecurityContextを使用すると動作します。 – bcholmes
私は、ジェンキンがジェンキンのユーザーによって実行されている場合、あなたはドッカーのグループにジェンキンのユーザーを追加することができます。ルートユーザーを使用する必要はありません。より適切で安全なものになるでしょう。 –
ええ、悲しいことに、私はそれをどうやって行うのか分かりません。これはKubernetes環境でホストされているため、SSHをサーバーに追加してgroupaddを実行できるようなものではありません。しかし、おそらくそれは私が把握する必要があるものです。コメントありがとう! – bcholmes