diff --git a/README.md b/README.md --- a/README.md +++ b/README.md @@ -16,3 +16,24 @@ ``` The output displays the jenkins configuration files as they will be applied on the server. + +# Run on docker + +TODO improve this part + +- launch jenkins +``` +docker-compose build +docker-compose up +``` +- get the admin password in the logs +- connect to localhost:8080 +- change the admin password to `admin123` +- create a jenkins directory `jenkins-tools` +- create a new free-style job named `job-builder` inside the `jenkins-tools` pointing this git repository + - configure the right branch (ci here) + - Add a step `Execute a script shell` with this content +``` +tox update -- --delete-old +``` +- save and launch \o/ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,20 @@ +version: '3' + +volumes: + jenkins_data: + +services: + jenkins: + image: swh-jenkins:latest + build: + context: docker + args: + DOCKER_GROUP: 998 + volumes: + - jenkins_data:/var/jenkins_home + - /var/run/docker.sock:/var/run/docker.sock + environment: + - PLUGINS_FORCE_UPGRADE=true + ports: + - 8080:8080 + entrypoint: /docker/entrypoint.sh diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,28 @@ +FROM jenkins/jenkins:lts-jdk11 + +USER root + +RUN apt-get update && apt-get -y install python3-pip && \ + pip install tox + +# Adapt this group if the docker gid is not 999 on your local environment +ARG DOCKER_GROUP 998 + +# Install docker tools +RUN addgroup --gid ${DOCKER_GROUP} docker && \ + mkdir -p /etc/apt/keyrings /etc/apt/sources.list.d && \ + apt-get update && apt-get -y install ca-certificates curl gnupg lsb-release && \ + curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list && \ + apt-get update && \ + apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin + +COPY --chown=jenkins:jenkins . /docker/ +COPY jenkins_jobs.ini /etc/jenkins_jobs/jenkins_jobs.ini + +RUN adduser jenkins docker && \ + chmod a+x /docker/entrypoint.sh + +USER jenkins + +ENTRYPOINT /docker/entrypoint.sh diff --git a/docker/Readme.md b/docker/Readme.md new file mode 100644 --- /dev/null +++ b/docker/Readme.md @@ -0,0 +1,6 @@ +# How to generate the plugin list + +``` +JENKINS_HOST=username:password@myhost.com:port +curl -sSL "https://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?([\w-]+).*?([^<]+)()(<\/\w+>)+/\1 \2\n/g'|sed 's/ /:/' +``` diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,10 @@ +#!/bin/bash -x + +PLUGINS_FILE=/docker/plugins.txt + +if [ -f "$PLUGINS_FILE" ]; then + echo "Installing plugins from $PLUGINS_FILE ..." + jenkins-plugin-cli -f $PLUGINS_FILE +fi + +/usr/bin/tini -- /usr/local/bin/jenkins.sh diff --git a/docker/jenkins_jobs.ini b/docker/jenkins_jobs.ini new file mode 100644 --- /dev/null +++ b/docker/jenkins_jobs.ini @@ -0,0 +1,14 @@ +[job_builder] +ignore_cache=True +keep_descriptions=False +#include_path=.:scripts:~/git/ +#exclude=.*:manual:./development +recursive=False +allow_duplicates=False +update=all + +[jenkins] +user=admin +password=admin123 +url=http://localhost:8080 +query_plugins_info=False diff --git a/docker/plugins.txt b/docker/plugins.txt new file mode 100644 --- /dev/null +++ b/docker/plugins.txt @@ -0,0 +1,165 @@ +pam-auth:1.8 +build-history-metrics-plugin:97.vdcf3aa48af8d +resource-disposer:0.19 +pipeline-graph-analysis:195.v5812d95a_a_2f9 +token-macro:293.v283932a_0a_b_49 +publish-over-ssh:1.24 +mashup-portlets-plugin:1.1.2 +plain-credentials:1.8 +sshd:3.242.va_db_9da_b_26a_c3 +external-monitor-job:191.v363d0d1efdf8 +javax-mail-api:1.6.2-6 +mailer:414.vcc4c33714601 +sse-gateway:1.25 +pipeline-utility-steps:2.13.0 +jquery:1.12.4-1 +jnr-posix-api:3.1.7-3 +docker-java-api:3.2.13-37.vf3411c9828b9 +workflow-step-api:625.vd896b_f445a_f8 +email-ext:2.89 +pipeline-model-extensions:2.2097.v33db_b_de764b_e +maven-plugin:3.19 +jaxb:2.3.6-1 +workflow-cps:2725.v7b_c717eb_12ce +subversion:2.15.5 +project-build-times:1.2.1 +extended-choice-parameter:346.vd87693c5a_86c +blueocean-pipeline-editor:1.25.5 +shiningpanda:0.24 +blueocean-config:1.25.5 +bouncycastle-api:2.26 +jira:3.7.1 +font-awesome-api:6.1.1-1 +htmlpublisher:1.30 +snakeyaml-api:1.30.1 +github-branch-source:1637.vd833b_7ca_7654 +checks-api:1.7.4 +dtkit-api:3.0.1 +pubsub-light:1.16 +lockable-resources:2.15 +workflow-durable-task-step:1146.v1a_d2e603f929 +apache-httpcomponents-client-4-api:4.5.13-1.0 +blueocean-bitbucket-pipeline:1.25.5 +jenkins-design-language:1.25.5 +project-stats-plugin:0.4 +favorite:2.4.1 +caffeine-api:2.9.3-65.v6a_47d0f4d1fe +display-url-api:2.3.6 +docker-plugin:1.2.9 +blueocean-commons:1.25.5 +forensics-api:1.15.1 +popper-api:1.16.1-3 +blueocean-git-pipeline:1.25.5 +workflow-aggregator:581.v0c46fa_697ffd +pipeline-stage-tags-metadata:2.2097.v33db_b_de764b_e +blueocean-rest:1.25.5 +github:1.34.3 +prometheus:2.0.11 +plugin-util-api:2.17.0 +ssh-slaves:1.821.vd834f8a_c390e +script-security:1175.v4b_d517d6db_f0 +trilead-api:1.57.v6e90e07157e1 +ssh-credentials:277.v95c2fec1c047 +phabricator-plugin:2.1.5 +ldap:2.10 +build-token-root:1.9 +ansicolor:1.0.1 +workflow-job:1186.v8def1a_5f3944 +mercurial:2.16.2 +credentials:1129.vef26f5df883c +variant:1.4 +blueocean-autofavorite:1.2.5 +blueocean-events:1.25.5 +extended-read-permission:3.2 +matrix-project:771.v574584b_39e60 +blueocean-display-url:2.4.1 +okhttp-api:4.9.3-105.vb96869f8ac3a +pipeline-build-step:2.18 +pipeline-milestone-step:101.vd572fef9d926 +antisamy-markup-formatter:2.7 +bootstrap4-api:4.6.0-5 +analysis-model-api:10.12.0 +pipeline-model-definition:2.2097.v33db_b_de764b_e +cvs:2.19.1 +workflow-multibranch:716.vc692a_e52371b_ +bootstrap5-api:5.1.3-7 +github-api:1.303-400.v35c2d8258028 +cloudbees-disk-usage-simple:0.10 +pipeline-stage-step:293.v200037eefcd5 +blueocean-jwt:1.25.5 +docker-workflow:1.28 +ant:475.vf34069fef73c +pipeline-stage-view:2.24 +ace-editor:1.1 +workflow-scm-step:400.v6b_89a_1317c9a_ +momentjs:1.1.1 +rebuild:1.34 +warnings-ng:9.13.0 +prism-api:1.28.0-2 +jquery3-api:3.6.0-4 +jquery-detached:1.2.1 +popper2-api:2.11.5-2 +workflow-support:820.vd1a_6cc65ef33 +workflow-basic-steps:948.v2c72a_091b_b_68 +blueocean-dashboard:1.25.5 +pipeline-model-api:2.2097.v33db_b_de764b_e +plot:2.1.10 +blueocean:1.25.5 +cloudbees-folder:6.729.v2b_9d1a_74d673 +blueocean-pipeline-scm-api:1.25.5 +timestamper:1.18 +blueocean-rest-impl:1.25.5 +credentials-binding:523.vd859a_4b_122e6 +copyartifact:1.46.4 +blueocean-core-js:1.25.5 +pipeline-input-step:449.v77f0e8b_845c4 +git-server:1.11 +javax-activation-api:1.2.0-3 +blueocean-personalization:1.25.5 +last-changes:2.7.11 +pipeline-rest-api:2.24 +jackson2-api:2.13.3-285.vc03c0256d517 +blueocean-web:1.25.5 +junit:1119.1121.vc43d0fc45561 +git:4.11.3 +metrics:4.1.6.2 +mina-sshd-api-core:2.8.0-21.v493b_6b_db_22c6 +matrix-auth:3.1.3 +mina-sshd-api-common:2.8.0-21.v493b_6b_db_22c6 +ssh-agent:295.v9ca_a_1c7cc3a_a_ +pipeline-groovy-lib:593.va_a_fc25d520e9 +handlebars:3.0.8 +blueocean-github-pipeline:1.25.5 +compress-buildlog:1.2 +echarts-api:5.3.3-1 +cloudbees-bitbucket-branch-source:773.v4b_9b_005b_562b_ +docker-commons:1.19 +dashboard-view:2.432.va_712ce35862d +cobertura:1.17 +command-launcher:84.v4a_97f2027398 +authentication-tokens:1.4 +branch-api:2.1046.v0ca_37783ecc5 +build-timeout:1.21 +git-client:3.11.0 +javadoc:217.v905b_86277a_2a_ +workflow-api:1164.v760c223ddb_32 +data-tables-api:1.12.1-1 +mapdb-api:1.0.9.0 +jsch:0.1.55.2 +blueocean-jira:1.25.5 +workflow-cps-global-lib:588.v576c103a_ff86 +jjwt-api:0.11.5-77.v646c772fddb_0 +publish-over:0.22 +xunit:3.1.0 +python:1.3 +windows-slaves:1.8.1 +jdk-tool:1.5 +git-parameter:0.9.17 +code-coverage-api:2.0.4 +blueocean-pipeline-api-impl:1.25.5 +ws-cleanup:0.42 +handy-uri-templates-2-api:2.1.8-22.v77d5b_75e6953 +durable-task:496.va67c6f9eefa7 +blueocean-i18n:1.25.5 +scm-api:608.vfa_f971c5a_a_e9 +structs:318.va_f3ccb_729b_71