├── Dockerfile ├── LICENSE ├── README.md └── etc └── scripts ├── init.groovy ├── jenkins.sh └── start.sh /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM saymagic/androidbuilder:v1.0 2 | MAINTAINER saymagic "saymagic.dev@gmail.com" 3 | 4 | RUN apt-get update -qq && \ 5 | apt-get install -y --no-install-recommends git && \ 6 | apt-get clean 7 | 8 | # Download and unzip Gradle 9 | WORKDIR ${USR_LOCAL} 10 | ENV GRADLE_URL http://services.gradle.org/distributions/gradle-2.2.1-bin.zip 11 | ADD ${GRADLE_URL} gradle-2.2.1-bin.zip 12 | RUN unzip gradle-2.2.1-bin.zip && ln -s gradle-2.2.1 gradle 13 | ENV GRADLE_HOME ${USR_LOCAL}/gradle 14 | 15 | # Config Gradle PATH 16 | RUN echo "export PATH=${PATH}:${GRADLE_HOME}/bin" >> /etc/profile 17 | ENV PATH ${PATH}:${GRADLE_HOME}/bin 18 | 19 | ENV JENKINS_HOME /var/jenkins_home 20 | ENV JENKINS_VERSION 1.609.1 21 | ENV JENKINS_UC https://updates.jenkins-ci.org 22 | ENV COPY_REFERENCE_FILE_LOG /var/log/copy_reference_file.log 23 | RUN useradd -d "${JENKINS_HOME}" -u 1000 -m -s /bin/bash jenkins 24 | RUN mkdir -p /usr/share/jenkins/ref/init.groovy.d 25 | COPY /etc/scripts/init.groovy /usr/share/jenkins/ref/init.groovy.d/tcp-slave-agent-port.groovy 26 | RUN curl -fL http://mirrors.jenkins-ci.org/war-stable/$JENKINS_VERSION/jenkins.war -o /usr/share/jenkins/jenkins.war && \ 27 | chown -R jenkins "${JENKINS_HOME}" /usr/share/jenkins/ref && \ 28 | touch $COPY_REFERENCE_FILE_LOG && chown jenkins.jenkins $COPY_REFERENCE_FILE_LOG 29 | COPY /etc/scripts/jenkins.sh /usr/local/bin/jenkins.sh 30 | RUN chmod a+x /usr/local/bin/jenkins.sh 31 | VOLUME ${JENKINS_HOME} 32 | EXPOSE 8080 33 | 34 | # Copy start script 35 | COPY /etc/scripts/start.sh /usr/local/start.sh 36 | RUN chmod a+x /usr/local/start.sh 37 | CMD /usr/local/start.sh -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 saymagic 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | Blog post: [http://blog.saymagic.cn/2016/01/25/docker-image-for-android.html](http://blog.saymagic.cn/2016/01/25/docker-image-for-android.html) 3 | 4 | -------------------------------------------------------------------------------- /etc/scripts/init.groovy: -------------------------------------------------------------------------------- 1 | import hudson.model.*; 2 | import jenkins.model.*; 3 | 4 | 5 | Thread.start { 6 | sleep 10000 7 | println "--> setting agent port for jnlp" 8 | Jenkins.instance.setSlaveAgentPort(50000) 9 | } -------------------------------------------------------------------------------- /etc/scripts/jenkins.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | 5 | # Copy files from /usr/share/jenkins/ref into /var/jenkins_home 6 | # So the initial JENKINS-HOME is set with expected content. 7 | # Don't override, as this is just a reference setup, and use from UI 8 | # can then change this, upgrade plugins, etc. 9 | copy_reference_file() { 10 | f=${1%/} 11 | echo "$f" >> $COPY_REFERENCE_FILE_LOG 12 | rel=${f:23} 13 | dir=$(dirname ${f}) 14 | echo " $f -> $rel" >> $COPY_REFERENCE_FILE_LOG 15 | if [[ ! -e /var/jenkins_home/${rel} ]] 16 | then 17 | echo "copy $rel to JENKINS_HOME" >> $COPY_REFERENCE_FILE_LOG 18 | mkdir -p /var/jenkins_home/${dir:23} 19 | cp -r /usr/share/jenkins/ref/${rel} /var/jenkins_home/${rel}; 20 | # pin plugins on initial copy 21 | [[ ${rel} == plugins/*.jpi ]] && touch /var/jenkins_home/${rel}.pinned 22 | fi; 23 | } 24 | export -f copy_reference_file 25 | echo "--- Copying files at $(date)" >> $COPY_REFERENCE_FILE_LOG 26 | find /usr/share/jenkins/ref/ -type f -exec bash -c 'copy_reference_file {}' \; 27 | 28 | # if `docker run` first argument start with `--` the user is passing jenkins launcher arguments 29 | if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then 30 | exec java $JAVA_OPTS -jar /usr/share/jenkins/jenkins.war $JENKINS_OPTS "$@" 31 | fi 32 | 33 | # As argument is not jenkins, assume user want to run his own process, for sample a `bash` shell to explore this image 34 | exec "$@" -------------------------------------------------------------------------------- /etc/scripts/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | 4 | # Start Jenkins 5 | /usr/local/bin/jenkins.sh 6 | --------------------------------------------------------------------------------