Дженкинс: Проблема С Разрешением На Использование Docker В Качестве Среды Сборки

  • Автор темы Engillelanium82
  • Обновлено
  • 19, Oct 2024
  • #1

Я установил Jenkins на машину с Ubuntu 16.04. Сам Jenkins не запускается в контейнере. Я хочу просто позвонить

 
 [Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ docker inspect -f . node
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 112:116 -w /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2 -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:rw,z -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat node
[Pipeline] {
[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ cd /path/to/package.json
+ yarn install
yarn install v0.24.6
error An unexpected error occurred: "EACCES: permission denied, mkdir '/.config'".
info If you think this is a bug, please open a bug report with the information provided in "/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2/<path>/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
[Pipeline] }
$ docker stop --time=1 c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
$ docker rm -f c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE
 
using a node image. So here is my Jenkinsfile:

-u 1000

Довольно просто, правда?

Пользователь/группа Дженкинса mkdir /.config , and the uid of the node container is 1000 , следовательно, процесс пряжи (который запускается от имени пользователя узла 1000) не может выполнять свои функции, например 112:116 .

Я попытался раскрутить контейнер узла, передав аргумент pipeline { agent any stages { stage('install node modules...') { agent { docker 'node' } steps { sh 'cd /path/to/package.json; yarn install' } } } } , it bumped into permission issues when trying to create durable directories.

Похоже на ту или иную проблему, как мне ее обойти?

Журналы Дженкинса:

Ниже показано, где сборка начинается и завершается сбоем.

yarn install

#jenkins #docker #jenkins-pipeline

Engillelanium82


Рег
25 Oct, 2024

Тем
57

Постов
207

Баллов
522
  • 25, Oct 2024
  • #2

У меня была такая же проблема с node. Дело в том, что файлы в контейнере принадлежат root:root. Попробуйте добавить аргументы докера

 
 
 docker {

image 'node'

args '-e HOME=/tmp/home'
}
 
:

sh "sudo chown jenkins: -R \$PWD/" ||answer||

У меня сегодня была похожая проблема, но с другим изображением.

buildEnv.inside("-u 0") {}

Ссылка: https://docs.docker.com/storage/tmpfs/ Таким образом, вам не следует беспокоиться о каких-либо утечках безопасности или файлах, которые присутствуют после уничтожения контейнера внутри jenkins.

 

4_clon


Рег
17 Feb, 2008

Тем
68

Постов
195

Баллов
545
  • 25, Oct 2024
  • #3

docker { image 'node:8' args '--tmpfs /.config' } resolved my problem. But then the workspace will contains directory and files owned by root which can not be deleted by the user Jenkins at the next run when cleaning the workpace , so I have added docker { image 'node:8' args '-u root:root' } в начале трубопровода.

 

Supat2021


Рег
28 Aug, 2008

Тем
75

Постов
212

Баллов
597
  • 25, Oct 2024
  • #4

Это сработало для меня:

-u root:root

/tmp доступен для записи всем.

 

Vrsa


Рег
20 Mar, 2020

Тем
87

Постов
203

Баллов
668
Похожие темы Дата
Похожие темы
Дженкинс – Как Развернуть Sql-Скрипт В Культуре Devops, А Также В Ситуации Отката?
Cicd – Как Мне Импортировать Модуль Python Tkinter В Gitpod
Проблемы С Запуском Ansible На Сервере Windows, Подключенном К Домену
Как Я Могу Увидеть Ссылку На Указатель Температуры Head В Git?
Веб-Службы Amazon — Кластер K8S В Одноранговом Vpc Не Может Подключиться К Кластеру Rds
Kubernetes — Маршрутизируется Ли Трафик Через Rrancher, Когда Rancher Используется Для Настройки Кластера?
Kubernetes — Должны Ли Мы Развертывать Класс Хранилища Для Каждого Приложения Или Один Класс Хранилища Для Всех Приложений?
Непрерывная Интеграция. Как Протестировать Собственное Программное Обеспечение Пользовательского Интерфейса Macos В Контейнере Перед Развертыванием?
Управление Проектами – Что Вы Думаете О Быстром Принятии Решений?
Docker. Если Мы Используем Контейнеры, Нужно Ли Нам Еще Беспокоиться Об Управлении Конфигурацией На Уровне Инфраструктуры?
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно