Дженкінс: Випуск дозволу на використання Докера як середовища побудови


11

Я встановив Дженкінса на машині Ubuntu 16.04. Сам Дженкінс не працює в контейнері. Що я хочу зробити - це просто зателефонувати yarn installза допомогою зображення вузла. Отже ось мій Дженкінсфіл:

pipeline {
    agent any
    stages {
        stage('install node modules...') {
            agent { docker 'node' }
            steps {
                sh 'cd /path/to/package.json; yarn install'
            }
        }
    }
}

Досить прямо, правда?

користувач / група jenkins є 112:116, і uid контейнера вузла є 1000, отже, процес пряжі (який запускається як користувач 1000 вузла) не може робити свої речі, як mkdir /.config.

Я намагався розкрутити контейнер вузла, передаючи аргумент -u 1000, він натрапив на проблеми з дозволом при спробі створити міцні каталоги.

Це виглядає як те чи інше питання, як я можу обійти це?

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

Нижче - де починається і закінчується збірка.

[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

Додайте журнали
030

Прикріплені колоди. Я також спробував запустити Дженкінса, використовуючи його офіційний докер-образ, який працює чудово, тому що користувач jenkins у цьому зображенні докера 1000, що є таким же uid, як і користувач вузла в зображенні вузла.
Майкл

Чи ввімкнено і застосовується selinux?
Джеймс Швай

@JamesShewey Не впевнений. Я просто охоплюю екземпляр ubuntu AMI ec2.
Майкл

Я вважаю, що вони відключають це, але перевіряйте "sestatus". Якщо він увімкнено, спробуйте вимкнути його.
Джеймс Швей

Відповіді:


8

У мене була така ж проблема з вузлом. Річ у тому, що файли в контейнері належать "root: root". Спробуйте додати аргументи докер -u root:root:

docker { 
    image 'node:8'
    args '-u root:root'
}

Рішення працювало і для мене. Чому цього немає в документації про Дженкінса? (мою проблему було з простою pip installкомандою, в результаті чого Could not install packages due to an EnvironmentError: [Errno 13] Permission deniedзгадую її тут, щоб допомогти людям, які шукають це. Навіть використовуючи virtualenvабо pip install --userне виправляючи проблему для мене)
Rabarberski

3

У мене просто було подібне питання сьогодні, хоча з іншим зображенням.

docker {
 image 'node:8'
 args '--tmpfs /.config'
}

Довідка: https://docs.docker.com/storage/tmpfs/ Таким чином, ви не повинні турбуватися про якісь витоки безпеки або файли, які є після знищення контейнера всередині джинкінів.


3

buildEnv.inside("-u 0") {}вирішив мою проблему. Але тоді робоча область містить каталог і файли, що належать root, які користувач Jenkins не може бути видалений під час наступного запуску при очищенні робочої області, тому я додав sh "sudo chown jenkins: -R \$PWD/" на початку конвеєра.


Я використовував аналогічний підхід, але в кінці побіг "ш" chmod -R a + w \ $ PWD ", як крок" Очищення "замість того, щоб заповнити його на початку. Користувача Дженкінса не було визначено в моєму контейнері, а судо було недоступним. Я міг би також видалити файли, але подумав, що може бути краще тримати їх для розслідування, якщо щось піде не так.
Олів'є Будрі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.