2017-04-29 1 views
4

J'ai créé un tas de travaux de pipeline de déploiement locaux, ces tâches consistent à supprimer un conteneur existant, à créer un service local, à créer une image docker, à exécuter le conteneur, etc. pas de travaux CI/CD, juste de petits pipelines pour le déploiement local pendant le développement. Ce que je veux faire maintenant est de le rendre disponible à tous nos développeurs, afin qu'ils puissent simplement faire tourner une instance locale de jenkins qui contient déjà les jobs.Créer une image Jenkins Docker avec des travaux pré-configurés

Mon fichier docker est raisonnablement tout droit ...

FROM jenkins:latest 

USER root 

RUN apt-get update 
RUN apt-get install -y sudo 

RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers 

# Docker 
RUN apt-get update 
RUN apt-get dist-upgrade -y 
RUN apt-get install apt-transport-https ca-certificates -y 
RUN sh -c "echo deb https://apt.dockerproject.org/repo debian-jessie main > /etc/apt/sources.list.d/docker.list" 
RUN apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D 
RUN apt-get update 
RUN apt-cache policy docker-engine 
RUN apt-get install docker-engine -y 

# .NET Core CLI dependencies 
RUN echo "deb [arch=amd64] http://llvm.org/apt/jessie/ llvm-toolchain-jessie-3.6 main" > /etc/apt/sources.list.d/llvm.list \ 
    && wget -q -O - http://llvm.org/apt/llvm-snapshot.gpg.key|apt-key add - \ 
    && apt-get update \ 
    && apt-get install -y --no-install-recommends \ 
     clang-3.5 \ 
     libc6 \ 
     libcurl3 \ 
     libgcc1 \ 
     libicu52 \ 
     liblldb-3.6 \ 
     liblttng-ust0 \ 
     libssl1.0.0 \ 
     libstdc++6 \ 
     libtinfo5 \ 
     libunwind8 \ 
     libuuid1 \ 
     zlib1g \ 
    && rm -rf /var/lib/apt/lists/* 

#DotNetCore 
RUN curl -sSL -o dotnet.tar.gz https://go.microsoft.com/fwlink/?linkid=847105 
RUN mkdir -p /opt/dotnet && tar zxf dotnet.tar.gz -C /opt/dotnet 
RUN ln -s /opt/dotnet/dotnet /usr/local/bin 

# Minimal Jenkins Plugins 
RUN /usr/local/bin/install-plugins.sh git matrix-auth workflow-aggregator docker-workflow blueocean credentials-binding 

# Skip initial setup 
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false 

COPY LocallyDeployIdentityConfig.xml /var/jenkins_home/jobs/identity/config.xml 

USER jenkins 

Ce que je pensais que je pouvais faire est de simplement copier un fichier de configuration du travail dans le répertoire/emploi/dossier jobname et le travail apparaîtrait, mais pas seulement cela n'apparaît-il pas, mais maintenant je ne peux pas non plus créer d'emplois manuellement. Je reçois maintenant une exception java.io.IOException "Aucun fichier ou répertoire" - Notez que lorsque je suis exec dans le conteneur en cours d'exécution, les répertoires job et jobname existent et mon fichier de configuration est là.

Des idées?

Répondre

5

Pour tous ceux qui sont intéressés - j'ai trouvé une meilleure solution. Je fais simplement correspondre le dossier des tâches à un dossier sur mon hôte, de cette façon je peux placer les tâches créées dans le contrôle des sources et les éditer puis les ajouter sans avoir à créer une nouvelle image docker.

Classé.

+0

pouvez-vous s'il vous plaît fournir un peu plus de détails sur cette approche –

0

Je maintiens les emplois dans un dossier d'amorçage avec configs etc.

Pour ajouter un emploi (c.-à-seedjob) Je dois ajouter ce qui suit à la Dockerfile:

# copy seedjob 
COPY bootstrap/seedjob.xml /usr/share/jenkins/ref/jobs/seedjob/config.xml