文件结构

  1. -rw-rw-r-- 1 admin admin 643 9 29 20:54 Dockerfile
  2. -rw-rw-r-- 1 admin admin 424 9 29 20:54 jenkins-entrypoint.sh
  3. drwxrwxr-x 18 admin admin 4096 7 18 19:39 jenkins-metadata

文件内容

Dockerfile

  1. FROM jenkins/jenkins:2.197
  2. ENV TZ="Asia/Shanghai"
  3. USER root
  4. RUN echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config \
  5. && apt-get -y update \
  6. && apt-get -y install vim openssh-client \
  7. && usermod -u 500 jenkins && groupmod -g 500 jenkins
  8. # copy jobs/plugins/secrets
  9. COPY --chown=jenkins:jenkins . /tmp/
  10. # override the entry point to use a custom script
  11. COPY --chown=jenkins:jenkins jenkins-entrypoint.sh /usr/local/bin/jenkins-entrypoint.sh
  12. # make custom entry point script executable
  13. RUN chmod +x /usr/local/bin/jenkins-entrypoint.sh
  14. USER jenkins
  15. ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/jenkins-entrypoint.sh"]

jenkins-entrypoint.sh

  1. #!/bin/bash
  2. # we have to do this in an entrypoint becuase the jenkins image has defined $JENKINS_HOME as a volume
  3. if [ ! -d /var/jenkins_home/nodes ]; then
  4. echo "nodes directory not exist, we will use image data."
  5. cp -r /tmp/jenkins-metadata/. /var/jenkins_home/
  6. else
  7. dir_size=`ls -A /var/jenkins_home/nodes |wc -w`
  8. if [ "$dir_size" != "0" ]; then
  9. echo "nodes directory already has data, we will use volume data."
  10. else
  11. echo 'nodes directory hava no data, we will use image data.'
  12. cp -r /tmp/jenkins-metadata/. /var/jenkins_home/
  13. fi
  14. fi
  15. # call the original entry point
  16. /sbin/tini -- /usr/local/bin/jenkins.sh

jenkins-metadata

存放JENKINS_HOME数据