Добавить предопределенные задания Jenkins в мастер Jenkins в докере

Я искал в Интернете целых 2 дня без какого-либо прогресса. Может быть так, что ответ находится всего в одном клике, но я не могу его найти. Я ослеп. Кстати, я работаю на Windows 10...

Проблема в том, что я хочу создать простой файл Dockerfile, который может создать образ Docker с мастером Jenkins со всем, что я хочу, чтобы он содержал. Например:

  • общая конфигурация Дженкинса
  • пользователи
  • плагины
  • рабочие места
  • рабы

так далее...

Теперь у меня по крайней мере некоторые части работают... Я могу избавиться от первоначального «привет, добро пожаловать в jenkins» и определить моего первого пользователя + установить плагины, которые я записал в текстовом файле.

НО, когда дело доходит до чертовой работы Дженкинса, все становится немного сложнее.

Поскольку мой Dockerfile берет «базовый образ» из jenkins/jenkins:lts-alpine, он создает том для /var/jenkins_home/, в котором, похоже, хранятся задания. И как-то проблематично копировать файлы в эту папку. Я попытался добавить инструкцию COPY в свой Dockerfile для копирования папки и файлов, которые создаются, когда я вручную создаю задание в Jenkins, но похоже, что Jenkins по какой-то причине не читает их, даже после перезапуска/перезагрузки с диска. Дело в том, что он действительно работает при копировании заданий после «установки». Как docker cp jobs-on-my-machine container:/var/jenkins_home/jobs, но мне не нужно много лишнего, кроме моего Dockerfile. Я хочу, чтобы это было как можно проще. С этим решением я, скорее всего, даже не смогу зафиксировать это изменение, поскольку diff docker показывает этот вывод:

C:\Dev>docker diff 3
C /tmp
A /tmp/hsperfdata_jenkins
A /tmp/hsperfdata_jenkins/6
A /tmp/jetty-0.0.0.0-8080-war-_-any-6459623464825334329.dir
A /tmp/jna--1712433994
A /tmp/winstone4948624124562796293.jar

видите ли... В каталоге /var/jenkins_home/jobs/ ничего не изменилось... Вообще ничего не отслеживается :(

Взгляните на мой контент Dockerfile ниже:

# Pull the latest Jenkins docker image from Docker Hub.
# Currently Alpine is used because the Internet says its safer :)
from jenkins/jenkins:lts-alpine

# Disable Jenkins setup wizard normally showing up during initial startup
ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false"

# Copy the groovy script creating the first user into the 
# run-on-startup-directory into the docker image
COPY **security.groovy** /usr/share/jenkins/ref/init.groovy.d/security.groovy

# Copy the plugins text file into the docker image
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt

# Run the Jenkins default install-plugins script to install 
# plugins defined in the plugins text file
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt

# Add the predefined Jenkins jobs _inside_ folder 'jenkins-jobs' into Jenkins
COPY jenkins-jobs /var/jenkins_home/jobs/

Содержание security.groovy:

#!groovy

import jenkins.model.*
import hudson.security.*
import jenkins.security.s2m.AdminWhitelistRule

def instance = Jenkins.getInstance()

def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("admin", "admin")
instance.setSecurityRealm(hudsonRealm)

def strategy = new FullControlOnceLoggedInAuthorizationStrategy()
instance.setAuthorizationStrategy(strategy)
instance.save()

Jenkins.instance.getInjector().getInstance(AdminWhitelistRule.class).setMasterKillSwitch(false)

плагины.txt:

cloudbees-folder
bouncycastle-api
structs
script-security
workflow-step-api
scm-api
workflow-api
junit
antisamy-markup-formatter
workflow-support
workflow-job
token-macro
build-timeout
credentials
ssh-credentials
plain-credentials
credentials-binding
timestamper
durable-task
workflow-durable-task-step
matrix-project
resource-disposer
ws-cleanup
ant
gradle
pipeline-milestone-step
jquery-detached
jackson2-api
ace-editor
workflow-scm-step
workflow-cps
pipeline-input-step
pipeline-stage-step
pipeline-graph-analysis
pipeline-rest-api
handlebars
momentjs
pipeline-stage-view
pipeline-build-step
pipeline-model-api
pipeline-model-extensions
apache-httpcomponents-client-4-api
jsch
git-client
git-server
workflow-cps-global-lib
display-url-api
mailer
branch-api
workflow-multibranch
authentication-tokens
docker-commons
docker-workflow
pipeline-stage-tags-metadata
pipeline-model-declarative-agent
workflow-basic-steps
pipeline-model-definition
workflow-aggregator
github-api
git
github
github-branch-source
pipeline-github-lib
mapdb-api
subversion
ssh-slaves
matrix-auth
pam-auth
ldap
email-ext
mercurial

person aoki    schedule 28.03.2018    source источник
comment
Пожалуйста, включите содержимое plugins.txt, скопированное в /usr/share/jenkins/ref/plugins.txt   -  person Stefan Crain    schedule 28.03.2018
comment
Его добавил ______:)   -  person aoki    schedule 29.03.2018


Ответы (1)


Если кто-то еще найдет этот вопрос:

Из GitHub - jenkinsci/docker:

В таком производном образе вы можете настроить свой экземпляр jenkins с помощью сценариев ловушек или дополнительных плагинов. Для этой цели используйте /usr/share/jenkins/ref в качестве места для определения содержимого JENKINS_HOME по умолчанию, которое вы хотите, чтобы целевая установка выглядела так:

Когда контейнер jenkins запускается, он проверяет, что JENKINS_HOME имеет этот справочный контент, и копирует его туда, если это необходимо. Он не будет переопределять такие файлы, поэтому, если вы обновили некоторые плагины из пользовательского интерфейса, они не будут восстановлены при следующем запуске.
Если вы хотите переопределить, добавьте «.override» к имени эталонного файла. Например. файл с именем /usr/share/jenkins/ref/config.xml.override перезапишет существующий файл config.xml в JENKINS_HOME.

Что я сделал сам, и что у меня работает, так это: скопируйте каталог jobs, найденный в вашем экземпляре Jenkins, туда, где вы можете запустить docker build. Поместите каталог jobs из экземпляра Jenkins в другой каталог, например jobs_jenkins. Это означает, что у вас будет $PWD/jobs_jenkins/jobs

Добавьте следующую строку в свой Dockerfile:

...
FROM jenkins/jenkins:lts-alpine
COPY jobs_jenkins /usr/share/jenkins/ref/
...

Насколько я понимаю, я думаю, что сам образ jenkins запускает сценарий запуска, использующий /usr/share/jenkins/ref, и материал, скопированный непосредственно в /var/jenkins_home, не будет присутствовать... Для получения дополнительной информации прочитайте README.md. (Из GitHub - jenkinsci/docker)

person user1098490    schedule 21.04.2021