Сводка
Сбой запуска декларативного конвейерного задания в jenkins, которое было развернуто в кластере kubernetes, при использовании агента Docker со следующей ошибкой:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.39/images/create?fromImage=node&tag=10.15.1: dial unix /var/run/docker.sock: connect: permission denied
Как решить это разрешениеошибка в объявлении kubernetes?
Справочная информация
У нас есть сервер jenkins, который был развернут в кластер kubernetes с использованием образа jenkinsci/blueocean
.Объявление kubernetes выполняется следующим образом:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins-master
spec:
replicas: 1
template:
metadata:
labels:
app: jenkins-master
spec:
terminationGracePeriodSeconds: 10
serviceAccountName: jenkins
containers:
- name: jenkins-master
image: jenkinsci/blueocean
imagePullPolicy: Always
ports:
- name: http-port
containerPort: 8080
- name: jnlp-port
containerPort: 50000
env:
- name: "JAVA_OPTS"
value: "-Dorg.jenkinsci.plugins.durabletask.BourneShellScript.HEARTBEAT_CHECK_INTERVAL=3600"
volumeMounts:
- name: jenkins-home
mountPath: /var/jenkins_home
- name: docker-socket
mountPath: /var/run/docker.sock
volumes:
- name: jenkins-home
persistentVolumeClaim:
claimName: jenkins
- name: docker-socket
hostPath:
path: /var/run/docker.sock
type: File
Затем мы объявляем декларативное конвейерное задание jenkins следующим образом:
pipeline {
agent {
docker {
image 'node:10.15.1'
label 'master'
}
}
stages {
stage('Checkout source code') {
steps {
checkout scm
}
}
stage('Build project') {
steps {
sh 'npm install'
sh 'npm run compile'
}
}
stage('Run quality assurance') {
steps {
sh 'npm run style:check'
sh 'npm run test:coverage'
}
}
}
}
Это задание не выполняется с вышеупомянутой ошибкой.Я подозреваю, что док-сокет был смонтирован в системе, но пользователь, выполняющий задание, не имеет разрешения на выполнение сокета.Однако я не могу добавить пользователя в группу в созданном модуле, используя sudo usermod -a -G docker $USER
, поскольку модуль будет воссоздан при каждом повторном развертывании.
Вопросы
- Можно ли подключитьтом докера, использующий правильного пользователя в объявлении kubernetes?
- Могу ли я объявить конвейер иначе, если невозможно установить разрешение в объявлении kubernetes?
- Есть ли какие-то другиеРешение, о котором я не задумывался?
Спасибо.