├── README.md ├── android-java7-8-r25-0-1 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── android-java7-8-r25 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── android-java7-r22-0-1 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── android-java7-r22 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── android-java7-r24-4-1 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── android-java7 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── android-java8-r24-3-3 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── android-java8-r24-4-1 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── android-java8-r25 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── errbit ├── Dockerfile └── launch.sh ├── go-cd-agent-rails ├── Dockerfile ├── README.md └── image │ └── opt │ └── go │ ├── install_redis.sh │ └── start.sh ├── go-cd-agent ├── Dockerfile ├── README.md └── image │ └── opt │ └── go │ └── start.sh ├── go-cd ├── Dockerfile ├── README.md └── image │ └── opt │ └── go │ ├── admins.properties │ ├── go_init.sh │ ├── openldap_init.sh │ └── start.sh ├── java7-8 ├── Dockerfile ├── README.md └── tools │ ├── android-accept-licenses.sh │ └── android-wait-for-emulator.sh ├── jenkins ├── Dockerfile ├── README.md ├── run.sh ├── slave.sh └── wrapdocker ├── nginx-confd ├── Dockerfile ├── README.md ├── conf.d │ ├── nginx-keys.toml │ └── nginx.toml ├── nginx │ └── nginx.conf ├── scripts │ └── boot.sh └── templates │ ├── nginx-keys.tmpl │ └── nginx.tmpl └── ubuntu-16-04-java7-8 ├── Dockerfile ├── README.md └── tools ├── android-accept-licenses.sh └── android-wait-for-emulator.sh /README.md: -------------------------------------------------------------------------------- 1 | # Docker files 2 | 3 | * [Building Android ubuntu 16.04 (with NDK)](ubuntu-16-04-java7-8/README.md) 4 | * [Building Android ubuntu 14.04 (with NDK)](java7-8/README.md) 5 | 6 | ## License 7 | 8 | Copyright [2015] 9 | 10 | Contributors: 11 | * Jacek Marchwicki 12 | * Karol Wojtaszek 13 | 14 | Licensed under the Apache License, Version 2.0 (the "License"); 15 | you may not use this file except in compliance with the License. 16 | You may obtain a copy of the License at 17 | 18 | http://www.apache.org/licenses/LICENSE-2.0 19 | 20 | 21 | Unless required by applicable law or agreed to in writing, software 22 | distributed under the License is distributed on an "AS IS" BASIS, 23 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 24 | See the License for the specific language governing permissions and 25 | limitations under the License. 26 | -------------------------------------------------------------------------------- /android-java7-8-r25-0-1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java7 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java7-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | ENV JAVA7_HOME /usr/lib/jvm/java-8-oracle 15 | 16 | # Install java8 17 | RUN apt-get update && \ 18 | apt-get install -y software-properties-common && \ 19 | add-apt-repository -y ppa:webupd8team/java && \ 20 | (echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 21 | apt-get update && \ 22 | apt-get install -y oracle-java8-installer && \ 23 | apt-get clean && \ 24 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 25 | ENV JAVA8_HOME /usr/lib/jvm/java-8-oracle 26 | 27 | # Install Deps 28 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 29 | 30 | # Copy install tools 31 | COPY tools /opt/tools 32 | ENV PATH ${PATH}:/opt/tools 33 | 34 | # Install Android SDK 35 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \ 36 | tar xzf android-sdk.tgz && \ 37 | rm -f android-sdk.tgz && \ 38 | chown -R root.root android-sdk-linux && \ 39 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 40 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools,build-tools-22.0.1,build-tools-23.0.3,build-tools-24.0.3,build-tools-25.0.0,build-tools-25.0.1,android-21,android-22,android-23,android-24,android-25,addon-google_apis_x86-google-21,extra-android-support,extra-android-m2repository,extra-google-m2repository,extra-google-google_play_services,sys-img-armeabi-v7a-android-24" 41 | 42 | # Setup environment 43 | ENV ANDROID_HOME /opt/android-sdk-linux 44 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 45 | 46 | RUN which adb 47 | RUN which android 48 | 49 | # Create emulator 50 | RUN echo "no" | android create avd \ 51 | --force \ 52 | --device "Nexus 5" \ 53 | --name test \ 54 | --target android-24 \ 55 | --abi armeabi-v7a \ 56 | --skin WVGA800 \ 57 | --sdcard 512M 58 | 59 | # Cleaning 60 | RUN apt-get clean 61 | 62 | # GO to workspace 63 | RUN mkdir -p /opt/workspace 64 | WORKDIR /opt/workspace 65 | -------------------------------------------------------------------------------- /android-java7-8-r25-0-1/README.md: -------------------------------------------------------------------------------- 1 | # android java7 and java8 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 8 and Java 8. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | 8 | ## Setting default java: 9 | * java8 (default) `update-java-alternatives --set java-8-oracle`, directory: `/usr/lib/jvm/java-8-oracle`, env: `$JAVA7_HOME` 10 | * java7 `update-java-alternatives --set java-7-oracle`, directory: `/usr/lib/jvm/java-7-oracle`, env: `$JAVA7_HOME` 11 | 12 | 13 | ## Build image 14 | 15 | ```bash 16 | docker build -t jacekmarchwicki/android . 17 | ``` 18 | 19 | If building fail you can debug via where `1b372b1f76f2` is partial build 20 | 21 | ```bash 22 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 23 | ``` 24 | 25 | ## Push build version to repository 26 | 27 | ```bash 28 | docker push jacekmarchwicki/android:java8 29 | ``` 30 | 31 | ## Usage 32 | Change directory to your project directory, than run: 33 | 34 | ```bash 35 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java8 /bin/sh -c "./gradlew build" 36 | ``` 37 | 38 | -------------------------------------------------------------------------------- /android-java7-8-r25-0-1/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java7-8-r25-0-1/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /android-java7-8-r25/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java7 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java7-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | ENV JAVA7_HOME /usr/lib/jvm/java-8-oracle 15 | 16 | # Install java8 17 | RUN apt-get update && \ 18 | apt-get install -y software-properties-common && \ 19 | add-apt-repository -y ppa:webupd8team/java && \ 20 | (echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 21 | apt-get update && \ 22 | apt-get install -y oracle-java8-installer && \ 23 | apt-get clean && \ 24 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 25 | ENV JAVA8_HOME /usr/lib/jvm/java-8-oracle 26 | 27 | # Install Deps 28 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 29 | 30 | # Copy install tools 31 | COPY tools /opt/tools 32 | ENV PATH ${PATH}:/opt/tools 33 | 34 | # Install Android SDK 35 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \ 36 | tar xzf android-sdk.tgz && \ 37 | rm -f android-sdk.tgz && \ 38 | chown -R root.root android-sdk-linux && \ 39 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 40 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools,build-tools-21.0.0,build-tools-21.0.1,build-tools-21.0.2,build-tools-21.1.0,build-tools-21.1.1,build-tools-21.1.2,build-tools-22.0.0,build-tools-22.0.1,build-tools-23.0.0,build-tools-23.0.3,build-tools-24.0.0,build-tools-24.0.1,build-tools-24.0.2,build-tools-24.0.3,build-tools-25.0.0,android-21,android-22,android-23,android-24,android-25,addon-google_apis_x86-google-21,extra-android-support,extra-android-m2repository,extra-google-m2repository,extra-google-google_play_services,sys-img-armeabi-v7a-android-24" 41 | 42 | # Setup environment 43 | ENV ANDROID_HOME /opt/android-sdk-linux 44 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 45 | 46 | RUN which adb 47 | RUN which android 48 | 49 | # Create emulator 50 | RUN echo "no" | android create avd \ 51 | --force \ 52 | --device "Nexus 5" \ 53 | --name test \ 54 | --target android-24 \ 55 | --abi armeabi-v7a \ 56 | --skin WVGA800 \ 57 | --sdcard 512M 58 | 59 | # Cleaning 60 | RUN apt-get clean 61 | 62 | # GO to workspace 63 | RUN mkdir -p /opt/workspace 64 | WORKDIR /opt/workspace 65 | -------------------------------------------------------------------------------- /android-java7-8-r25/README.md: -------------------------------------------------------------------------------- 1 | # android java7 and java8 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 8 and Java 8. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | ## Setting default java: 8 | * java8 (default) `update-java-alternatives --set java-8-oracle`, directory: `/usr/lib/jvm/java-8-oracle`, env: `$JAVA7_HOME` 9 | * java7 `update-java-alternatives --set java-7-oracle`, directory: `/usr/lib/jvm/java-7-oracle`, env: `$JAVA7_HOME` 10 | 11 | 12 | ## Build image 13 | 14 | ```bash 15 | docker build -t jacekmarchwicki/android . 16 | ``` 17 | 18 | If building fail you can debug via where `1b372b1f76f2` is partial build 19 | 20 | ```bash 21 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 22 | ``` 23 | 24 | ## Push build version to repository 25 | 26 | ```bash 27 | docker push jacekmarchwicki/android:java8 28 | ``` 29 | 30 | ## Usage 31 | Change directory to your project directory, than run: 32 | 33 | ```bash 34 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java8 /bin/sh -c "./gradlew build" 35 | ``` 36 | 37 | -------------------------------------------------------------------------------- /android-java7-8-r25/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java7-8-r25/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /android-java7-r22-0-1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java7 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java7-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | 15 | # Install Deps 16 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 17 | 18 | # Copy install tools 19 | COPY tools /opt/tools 20 | ENV PATH ${PATH}:/opt/tools 21 | 22 | # Install Android SDK 23 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.1.2-linux.tgz && \ 24 | tar xzf android-sdk.tgz && \ 25 | rm -f android-sdk.tgz && \ 26 | chown -R root.root android-sdk-linux && \ 27 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 28 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools,build-tools-22.0.1,android-22,addon-google_apis_x86-google-22,extra-android-support,extra-android-m2repository,extra-google-m2repository,sys-img-armeabi-v7a-android-22" 29 | 30 | # Setup environment 31 | ENV ANDROID_HOME /opt/android-sdk-linux 32 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 33 | 34 | RUN which adb 35 | RUN which android 36 | 37 | # Create emulator 38 | RUN echo "no" | android create avd \ 39 | --force \ 40 | --device "Nexus 5" \ 41 | --name test \ 42 | --target android-22 \ 43 | --abi armeabi-v7a \ 44 | --skin WVGA800 \ 45 | --sdcard 512M 46 | 47 | # Cleaning 48 | RUN apt-get clean 49 | 50 | # GO to workspace 51 | RUN mkdir -p /opt/workspace 52 | WORKDIR /opt/workspace 53 | -------------------------------------------------------------------------------- /android-java7-r22-0-1/README.md: -------------------------------------------------------------------------------- 1 | # android-java7 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 7. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | Contains: 8 | 9 | * Android SDK: r24.1.2 10 | * Build tools: 22.0.1 11 | * Android API: 22 12 | * Support maven repository 13 | * Google maven repository 14 | * Arm emulator: v22 15 | * Platform tools 16 | * Created emulator image named: "Nexus 5" 17 | 18 | ## Build image 19 | 20 | ```bash 21 | docker build -t jacekmarchwicki/android . 22 | ``` 23 | 24 | If building fail you can debug via where `1b372b1f76f2` is partial build 25 | 26 | ```bash 27 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 28 | ``` 29 | 30 | ## Push build version to repository 31 | 32 | ```bash 33 | docker push jacekmarchwicki/android:java7 34 | ``` 35 | 36 | ## Usage 37 | Change directory to your project directory, than run: 38 | 39 | ```bash 40 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java7 /bin/sh -c "./gradlew build" 41 | ``` 42 | 43 | -------------------------------------------------------------------------------- /android-java7-r22-0-1/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java7-r22-0-1/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /android-java7-r22/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java7 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java7-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | 15 | # Install Deps 16 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 17 | 18 | # Copy install tools 19 | COPY tools /opt/tools 20 | ENV PATH ${PATH}:/opt/tools 21 | 22 | # Install Android SDK 23 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.1.2-linux.tgz && \ 24 | tar xzf android-sdk.tgz && \ 25 | rm -f android-sdk.tgz && \ 26 | chown -R root.root android-sdk-linux && \ 27 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 28 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools,build-tools-22.0.0,android-22,addon-google_apis_x86-google-22,extra-android-support,extra-android-m2repository,extra-google-m2repository,sys-img-armeabi-v7a-android-22" 29 | 30 | # Setup environment 31 | ENV ANDROID_HOME /opt/android-sdk-linux 32 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 33 | 34 | RUN which adb 35 | RUN which android 36 | 37 | # Create emulator 38 | RUN echo "no" | android create avd \ 39 | --force \ 40 | --device "Nexus 5" \ 41 | --name test \ 42 | --target android-22 \ 43 | --abi armeabi-v7a \ 44 | --skin WVGA800 \ 45 | --sdcard 512M 46 | 47 | # Cleaning 48 | RUN apt-get clean 49 | 50 | # GO to workspace 51 | RUN mkdir -p /opt/workspace 52 | WORKDIR /opt/workspace 53 | -------------------------------------------------------------------------------- /android-java7-r22/README.md: -------------------------------------------------------------------------------- 1 | # android-java7 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 7. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | Contains: 8 | 9 | * Android SDK: r24.1.2 10 | * Build tools: 22.0.0 11 | * Android API: 22 12 | * Support maven repository 13 | * Google maven repository 14 | * Arm emulator: v22 15 | * Platform tools 16 | * Created emulator image named: "Nexus 5" 17 | 18 | ## Build image 19 | 20 | ```bash 21 | docker build -t jacekmarchwicki/android . 22 | ``` 23 | 24 | If building fail you can debug via where `1b372b1f76f2` is partial build 25 | 26 | ```bash 27 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 28 | ``` 29 | 30 | ## Push build version to repository 31 | 32 | ```bash 33 | docker push jacekmarchwicki/android:java7 34 | ``` 35 | 36 | ## Usage 37 | Change directory to your project directory, than run: 38 | 39 | ```bash 40 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java7 /bin/sh -c "./gradlew build" 41 | ``` 42 | 43 | -------------------------------------------------------------------------------- /android-java7-r22/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java7-r22/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /android-java7-r24-4-1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java7 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java7-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | 15 | # Install Deps 16 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 17 | 18 | # Copy install tools 19 | COPY tools /opt/tools 20 | ENV PATH ${PATH}:/opt/tools 21 | 22 | # Install Android SDK 23 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \ 24 | tar xzf android-sdk.tgz && \ 25 | rm -f android-sdk.tgz && \ 26 | chown -R root.root android-sdk-linux && \ 27 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 28 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools,build-tools-21.0.0,build-tools-21.0.1,build-tools-21.0.2,build-tools-21.1,build-tools-21.1.1,build-tools-21.1.2,build-tools-22.0.0,build-tools-22.0.1,build-tools-23.0.2,android-21,android-22,android-23,addon-google_apis_x86-google-21,extra-android-support,extra-android-m2repository,extra-google-m2repository,extra-google-google_play_services,sys-img-armeabi-v7a-android-21" 29 | 30 | # Setup environment 31 | ENV ANDROID_HOME /opt/android-sdk-linux 32 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 33 | 34 | RUN which adb 35 | RUN which android 36 | 37 | # Create emulator 38 | RUN echo "no" | android create avd \ 39 | --force \ 40 | --device "Nexus 5" \ 41 | --name test \ 42 | --target android-21 \ 43 | --abi armeabi-v7a \ 44 | --skin WVGA800 \ 45 | --sdcard 512M 46 | 47 | # Cleaning 48 | RUN apt-get clean 49 | 50 | # GO to workspace 51 | RUN mkdir -p /opt/workspace 52 | WORKDIR /opt/workspace 53 | -------------------------------------------------------------------------------- /android-java7-r24-4-1/README.md: -------------------------------------------------------------------------------- 1 | # android-java7 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 7. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | Contains: 8 | 9 | * Android SDK: r24.4.1 10 | * Build tools: 23.0.2 11 | * Android API: 23 12 | * Support maven repository 13 | * Google maven repository 14 | * Arm emulator: v21 15 | * Platform tools 16 | * Created emulator image named: "Nexus 5" 17 | 18 | ## Build image 19 | 20 | ```bash 21 | docker build -t jacekmarchwicki/android . 22 | ``` 23 | 24 | If building fail you can debug via where `1b372b1f76f2` is partial build 25 | 26 | ```bash 27 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 28 | ``` 29 | 30 | ## Push build version to repository 31 | 32 | ```bash 33 | docker push jacekmarchwicki/android:java7 34 | ``` 35 | 36 | ## Usage 37 | Change directory to your project directory, than run: 38 | 39 | ```bash 40 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java7 /bin/sh -c "./gradlew build" 41 | ``` 42 | 43 | -------------------------------------------------------------------------------- /android-java7-r24-4-1/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java7-r24-4-1/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /android-java7/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java7 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java7-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | 15 | # Install Deps 16 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 17 | 18 | # Copy install tools 19 | COPY tools /opt/tools 20 | ENV PATH ${PATH}:/opt/tools 21 | 22 | # Install Android SDK 23 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.3.3-linux.tgz && \ 24 | tar xzf android-sdk.tgz && \ 25 | rm -f android-sdk.tgz && \ 26 | chown -R root.root android-sdk-linux && \ 27 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 28 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --force --no-ui --filter platform-tools,tools,build-tools-21.0.0,build-tools-21.0.1,build-tools-21.0.2,build-tools-21.1,build-tools-21.1.1,build-tools-21.1.2,build-tools-22.0.0,build-tools-22.0.1,android-21,android-22,addon-google_apis_x86-google-21,extra-android-support,extra-android-m2repository,extra-google-m2repository,extra-google-google_play_services,sys-img-armeabi-v7a-android-21" 29 | 30 | # Setup environment 31 | ENV ANDROID_HOME /opt/android-sdk-linux 32 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 33 | 34 | RUN which adb 35 | RUN which android 36 | 37 | # Create emulator 38 | RUN echo "no" | android create avd \ 39 | --force \ 40 | --device "Nexus 5" \ 41 | --name test \ 42 | --target android-21 \ 43 | --abi armeabi-v7a \ 44 | --skin WVGA800 \ 45 | --sdcard 512M 46 | 47 | # Cleaning 48 | RUN apt-get clean 49 | 50 | # GO to workspace 51 | RUN mkdir -p /opt/workspace 52 | WORKDIR /opt/workspace 53 | -------------------------------------------------------------------------------- /android-java7/README.md: -------------------------------------------------------------------------------- 1 | # android-java7 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 7. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | Contains: 8 | 9 | * Android SDK: r24.3.3 10 | * Build tools: 21, 21.0.1, 21.0.2, 21.1, 21.1.1, 21.1.2, 22, 22.0.1 11 | * Android API: 21, 22 12 | * Support maven repository 13 | * Google maven repository 14 | * Arm emulator: v21 15 | * Platform tools 16 | * Created emulator image named: "Nexus 5" 17 | 18 | ## Build image 19 | 20 | ```bash 21 | docker build -t jacekmarchwicki/android . 22 | ``` 23 | 24 | If building fail you can debug via where `1b372b1f76f2` is partial build 25 | 26 | ```bash 27 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 28 | ``` 29 | 30 | ## Push build version to repository 31 | 32 | ```bash 33 | docker push jacekmarchwicki/android:java7 34 | ``` 35 | 36 | ## Usage 37 | Change directory to your project directory, than run: 38 | 39 | ```bash 40 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java7 /bin/sh -c "./gradlew build" 41 | ``` 42 | 43 | -------------------------------------------------------------------------------- /android-java7/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java7/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /android-java8-r24-3-3/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java8 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java8-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | 15 | # Install Deps 16 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 17 | 18 | # Copy install tools 19 | COPY tools /opt/tools 20 | ENV PATH ${PATH}:/opt/tools 21 | 22 | # Install Android SDK 23 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.3.3-linux.tgz && \ 24 | tar xzf android-sdk.tgz && \ 25 | rm -f android-sdk.tgz && \ 26 | chown -R root.root android-sdk-linux && \ 27 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 28 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools,build-tools-21.0.0,build-tools-21.0.1,build-tools-21.0.2,build-tools-21.1,build-tools-21.1.1,build-tools-21.1.2,build-tools-22.0.0,build-tools-22.0.1,build-tools-23.0.0,build-tools-23.0.3,android-21,android-22,android-23,android-24,addon-google_apis_x86-google-21,extra-android-support,extra-android-m2repository,extra-google-m2repository,extra-google-google_play_services,sys-img-armeabi-v7a-android-24" 29 | 30 | # Setup environment 31 | ENV ANDROID_HOME /opt/android-sdk-linux 32 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 33 | 34 | RUN which adb 35 | RUN which android 36 | 37 | # Create emulator 38 | RUN echo "no" | android create avd \ 39 | --force \ 40 | --device "Nexus 5" \ 41 | --name test \ 42 | --target android-24 \ 43 | --abi armeabi-v7a \ 44 | --skin WVGA800 \ 45 | --sdcard 512M 46 | 47 | # Cleaning 48 | RUN apt-get clean 49 | 50 | # GO to workspace 51 | RUN mkdir -p /opt/workspace 52 | WORKDIR /opt/workspace 53 | -------------------------------------------------------------------------------- /android-java8-r24-3-3/README.md: -------------------------------------------------------------------------------- 1 | # android-java8 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 8. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | Contains: 8 | 9 | * Android SDK: r24.3.3 10 | * Build tools: 21, 21.0.1, 21.0.2, 21.1, 21.1.1, 21.1.2, 22, 22.0.1, 23.0.0, 23.0.3 11 | * Android API: 21, 22, 23, 24 12 | * Support maven repository 13 | * Google maven repository 14 | * Arm emulator: v21 15 | * Platform tools 16 | * Created emulator image named: "Nexus 5" 17 | 18 | ## Build image 19 | 20 | ```bash 21 | docker build -t jacekmarchwicki/android . 22 | ``` 23 | 24 | If building fail you can debug via where `1b372b1f76f2` is partial build 25 | 26 | ```bash 27 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 28 | ``` 29 | 30 | ## Push build version to repository 31 | 32 | ```bash 33 | docker push jacekmarchwicki/android:java8 34 | ``` 35 | 36 | ## Usage 37 | Change directory to your project directory, than run: 38 | 39 | ```bash 40 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java8 /bin/sh -c "./gradlew build" 41 | ``` 42 | 43 | -------------------------------------------------------------------------------- /android-java8-r24-3-3/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java8-r24-3-3/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /android-java8-r24-4-1/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java8 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java8-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | 15 | # Install Deps 16 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 17 | 18 | # Copy install tools 19 | COPY tools /opt/tools 20 | ENV PATH ${PATH}:/opt/tools 21 | 22 | # Install Android SDK 23 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \ 24 | tar xzf android-sdk.tgz && \ 25 | rm -f android-sdk.tgz && \ 26 | chown -R root.root android-sdk-linux && \ 27 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 28 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools,build-tools-21.0.0,build-tools-21.0.1,build-tools-21.0.2,build-tools-21.1,build-tools-21.1.1,build-tools-21.1.2,build-tools-22.0.0,build-tools-22.0.1,build-tools-23.0.0,build-tools-23.0.3,build-tools-24.0.0,build-tools-24.0.1,build-tools-24.0.2,android-21,android-22,android-23,android-24,addon-google_apis_x86-google-21,extra-android-support,extra-android-m2repository,extra-google-m2repository,extra-google-google_play_services,sys-img-armeabi-v7a-android-24" 29 | 30 | # Setup environment 31 | ENV ANDROID_HOME /opt/android-sdk-linux 32 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 33 | 34 | RUN which adb 35 | RUN which android 36 | 37 | # Create emulator 38 | RUN echo "no" | android create avd \ 39 | --force \ 40 | --device "Nexus 5" \ 41 | --name test \ 42 | --target android-24 \ 43 | --abi armeabi-v7a \ 44 | --skin WVGA800 \ 45 | --sdcard 512M 46 | 47 | # Cleaning 48 | RUN apt-get clean 49 | 50 | # GO to workspace 51 | RUN mkdir -p /opt/workspace 52 | WORKDIR /opt/workspace 53 | -------------------------------------------------------------------------------- /android-java8-r24-4-1/README.md: -------------------------------------------------------------------------------- 1 | # android-java8 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 8. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | Contains: 8 | 9 | * Android SDK: r24.3.3 10 | * Build tools: 21, 21.0.1, 21.0.2, 21.1, 21.1.1, 21.1.2, 22, 22.0.1, 23.0.0, 23.0.3 11 | * Android API: 21, 22, 23, 24 12 | * Support maven repository 13 | * Google maven repository 14 | * Arm emulator: v21 15 | * Platform tools 16 | * Created emulator image named: "Nexus 5" 17 | 18 | ## Build image 19 | 20 | ```bash 21 | docker build -t jacekmarchwicki/android . 22 | ``` 23 | 24 | If building fail you can debug via where `1b372b1f76f2` is partial build 25 | 26 | ```bash 27 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 28 | ``` 29 | 30 | ## Push build version to repository 31 | 32 | ```bash 33 | docker push jacekmarchwicki/android:java8 34 | ``` 35 | 36 | ## Usage 37 | Change directory to your project directory, than run: 38 | 39 | ```bash 40 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java8 /bin/sh -c "./gradlew build" 41 | ``` 42 | 43 | -------------------------------------------------------------------------------- /android-java8-r24-4-1/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java8-r24-4-1/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /android-java8-r25/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:14.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java8 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java8-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | 15 | # Install Deps 16 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 17 | 18 | # Copy install tools 19 | COPY tools /opt/tools 20 | ENV PATH ${PATH}:/opt/tools 21 | 22 | # Install Android SDK 23 | RUN cd /opt && wget --output-document=android-sdk.tgz --quiet https://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && \ 24 | tar xzf android-sdk.tgz && \ 25 | rm -f android-sdk.tgz && \ 26 | chown -R root.root android-sdk-linux && \ 27 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools" && \ 28 | /opt/tools/android-accept-licenses.sh "android-sdk-linux/tools/android update sdk --all --no-ui --filter platform-tools,tools,build-tools-21.0.0,build-tools-21.0.1,build-tools-21.0.2,build-tools-21.1.0,build-tools-21.1.1,build-tools-21.1.2,build-tools-22.0.0,build-tools-22.0.1,build-tools-23.0.0,build-tools-23.0.3,build-tools-24.0.0,build-tools-24.0.1,build-tools-24.0.2,build-tools-24.0.3,build-tools-25.0.0,android-21,android-22,android-23,android-24,android-25,addon-google_apis_x86-google-21,extra-android-support,extra-android-m2repository,extra-google-m2repository,extra-google-google_play_services,sys-img-armeabi-v7a-android-24" 29 | 30 | # Setup environment 31 | ENV ANDROID_HOME /opt/android-sdk-linux 32 | ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools 33 | 34 | RUN which adb 35 | RUN which android 36 | 37 | # Create emulator 38 | RUN echo "no" | android create avd \ 39 | --force \ 40 | --device "Nexus 5" \ 41 | --name test \ 42 | --target android-24 \ 43 | --abi armeabi-v7a \ 44 | --skin WVGA800 \ 45 | --sdcard 512M 46 | 47 | # Cleaning 48 | RUN apt-get clean 49 | 50 | # GO to workspace 51 | RUN mkdir -p /opt/workspace 52 | WORKDIR /opt/workspace 53 | -------------------------------------------------------------------------------- /android-java8-r25/README.md: -------------------------------------------------------------------------------- 1 | # android-java8 2 | DEPRECATED use [java7-8](../java7-8/README.md) 3 | 4 | This docker is to build Android Gradle project with Java 8. 5 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 6 | 7 | Contains: 8 | 9 | * Android SDK: r24.4.1 10 | 11 | ## Build image 12 | 13 | ```bash 14 | docker build -t jacekmarchwicki/android . 15 | ``` 16 | 17 | If building fail you can debug via where `1b372b1f76f2` is partial build 18 | 19 | ```bash 20 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 21 | ``` 22 | 23 | ## Push build version to repository 24 | 25 | ```bash 26 | docker push jacekmarchwicki/android:java8 27 | ``` 28 | 29 | ## Usage 30 | Change directory to your project directory, than run: 31 | 32 | ```bash 33 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:java8 /bin/sh -c "./gradlew build" 34 | ``` 35 | 36 | -------------------------------------------------------------------------------- /android-java8-r25/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /android-java8-r25/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /errbit/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ruby:2.2.0 2 | 3 | MAINTAINER Karol Wojtaszek 4 | 5 | # OS-Level dependencies 6 | RUN apt-get update 7 | RUN DEBIAN_FRONTEND=noninteractive apt-get install -y \ 8 | git \ 9 | libxml2 \ 10 | libxml2-dev \ 11 | libxslt-dev \ 12 | libcurl4-openssl-dev \ 13 | nodejs 14 | 15 | # Setup environment 16 | ENV RAILS_ENV production 17 | ENV USE_ENV true 18 | 19 | # Create errbit user 20 | RUN /usr/sbin/useradd --create-home --home-dir /opt/errbit --shell /bin/bash errbit 21 | 22 | # Get errbit code 23 | RUN mkdir /opt/errbit/app 24 | 25 | # Set-up app 26 | WORKDIR /opt/errbit/app 27 | RUN git clone https://github.com/appunite/errbit.git . 28 | RUN cp /opt/errbit/app/config/unicorn.default.rb /opt/errbit/app/config/unicorn.rb 29 | RUN bundle install --deployment 30 | RUN chown -R errbit:errbit /opt/errbit/app 31 | 32 | ADD launch.sh /opt/launch.sh 33 | RUN chmod +x /opt/launch.sh 34 | 35 | USER errbit 36 | RUN bundle exec rake assets:precompile 37 | 38 | EXPOSE 3000 39 | 40 | ENTRYPOINT /opt/launch.sh 41 | CMD ["web"] -------------------------------------------------------------------------------- /errbit/launch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -x 4 | 5 | if [ -z "$MONGODB_URL" -a -n "$MONGODB_PORT" ]; then 6 | export MONGODB_URL="$MONGODB_PORT/errbit" 7 | fi 8 | export PATH=/opt/ruby/bin:$PATH 9 | if [ -z "$SECRET_TOKEN" -a ! -f "config/initializers/__secret_token.rb" ]; then 10 | echo "Errbit::Application.config.secret_token = '$(bundle exec rake secret)'" > config/initializers/__secret_token.rb 11 | fi 12 | if [ "$1" == "web" ]; then 13 | bundle exec unicorn -p 3000 -c /opt/errbit/app/config/unicorn.rb 14 | elif [ "$1" == "seed" ]; then 15 | bundle exec rake db:seed 16 | bundle exec rake db:mongoid:create_indexes 17 | else 18 | bundle exec unicorn -p 3000 -c /opt/errbit/app/config/unicorn.rb 19 | fi -------------------------------------------------------------------------------- /go-cd-agent-rails/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM dockerfile/java:oracle-java7 2 | MAINTAINER Karol Wojtaszek 3 | 4 | RUN apt-get -y update && apt-get install --no-install-recommends -y -qq curl docker.io git openssh-client unzip ruby ca-certificates patch gawk g++ gcc make libc6-dev patch libreadline6-dev zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake libtool bison pkg-config libffi-dev && apt-get clean all 5 | 6 | # install go agent 7 | RUN wget -O /tmp/go-agent.deb http://download.go.cd/gocd-deb/go-agent-14.4.0-1356.deb && dpkg -i /tmp/go-agent.deb && rm /tmp/go-agent.deb 8 | RUN echo "DAEMON=n" > /etc/default/go-agent 9 | ADD image / 10 | 11 | # install rvm 12 | RUN gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3; \curl -sSL https://get.rvm.io | bash -s stable 13 | ONBUILD RUN /bin/bash -l -c "source /etc/profile.d/rvm.sh" 14 | RUN /bin/bash -l -c "rvm install 2.1" 15 | RUN /bin/bash -l -c "echo 'gem: --no-ri --no-rdoc' > ~/.gemrc" 16 | RUN /bin/bash -l -c "gem install bundler --no-ri --no-rdoc" 17 | 18 | # install redis 19 | RUN sh /opt/go/install_redis.sh 20 | 21 | # install mongodb 22 | RUN apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 23 | RUN echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list 24 | RUN apt-get -y update && apt-get install -y mongodb-org && service mongod start && apt-get clean all 25 | 26 | # install postgresql 27 | RUN apt-get install -y postgresql postgresql-client 28 | 29 | CMD rm /usr/share/go-agent/.agent-bootstrapper.running; sh /opt/go/start.sh 30 | -------------------------------------------------------------------------------- /go-cd-agent-rails/README.md: -------------------------------------------------------------------------------- 1 | # Go CD Agent 2 | 3 | ## Building 4 | 5 | ```bash 6 | docker build --tag appunite/go-cd-agent:latest . 7 | ``` 8 | 9 | ## Running 10 | 11 | ```bash 12 | docker run -e GO_SERVER=ci.appunite.net -e AGENT_KEY=xxx -e AGENT_RESOURCES=test -e AGENT_ENV=rails -d --name go-cd-agent-rails appunite/go-cd-agent-rails:latest 13 | ``` 14 | 15 | ## TTY 16 | 17 | ```bash 18 | docker run \ 19 | -e GO_SERVER=ci.appunite.net \ 20 | --tty -i \ 21 | appunite/go-cd-agent-rails:14.4.0 /bin/bash 22 | ``` 23 | 24 | -------------------------------------------------------------------------------- /go-cd-agent-rails/image/opt/go/install_redis.sh: -------------------------------------------------------------------------------- 1 | cd /tmp 2 | wget http://download.redis.io/releases/redis-2.8.19.tar.gz 3 | tar -xzf redis-2.8.19.tar.gz 4 | cd redis-2.6.19 5 | make install 6 | 7 | rm -rf /tmp/redis* 8 | 9 | adduser --system --no-create-home --disabled-login --disabled-password --group redis 10 | 11 | touch /var/log/redis.log 12 | chown redis:redis /var/log/redis.log 13 | chmod u+w /var/log/redis.log 14 | 15 | cd /etc/init.d/ 16 | wget https://gist.github.com/peterc/408762/raw -O redis 17 | chmod u+x redis 18 | update-rc.d -f redis defaults 19 | 20 | mkdir /var/redis 21 | chown redis:redis /var/redis 22 | chmod u+xw /var/redis 23 | 24 | mkdir /etc/redis 25 | touch /etc/redis/redis.conf 26 | chown redis:redis -R /etc/redis/ 27 | 28 | 29 | cat< /etc/redis/redis.conf 30 | daemonize yes 31 | pidfile /var/run/redis.pid 32 | logfile /var/log/redis.log 33 | port 6379 34 | # bind 127.0.0.1 35 | # unixsocket /tmp/redis.sock 36 | timeout 300 37 | loglevel verbose 38 | databases 16 39 | save 900 1 40 | save 300 10 41 | save 60 10000 42 | rdbcompression yes 43 | dbfilename dump.rdb 44 | dir /var/redis/ 45 | # requirepass foobared 46 | EOF 47 | 48 | /etc/init.d/redis start -------------------------------------------------------------------------------- /go-cd-agent-rails/image/opt/go/start.sh: -------------------------------------------------------------------------------- 1 | mkdir /usr/share/go-agent/config 2 | 3 | eval `ssh-agent -s` 4 | 5 | cat< /usr/share/go-agent/config/autoregister.properties 6 | agent.auto.register.key=$AGENT_KEY 7 | agent.auto.register.resources=$AGENT_RESOURCES 8 | agent.auto.register.environments=$AGENT_ENV 9 | EOF 10 | 11 | chown go /usr/share/go-agent/config/autoregister.properties 12 | 13 | # Start redis 14 | /etc/init.d/redis start 15 | /etc/init.d/postgresql start 16 | 17 | /usr/share/go-agent/agent.sh -------------------------------------------------------------------------------- /go-cd-agent/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM dockerfile/java:oracle-java7 2 | MAINTAINER Karol Wojtaszek 3 | 4 | RUN apt-get -y update && apt-get install --no-install-recommends -y -qq curl docker.io git openssh-client unzip ruby ca-certificates && apt-get clean all 5 | 6 | RUN wget -O /tmp/go-agent.deb http://download.go.cd/gocd-deb/go-agent-14.4.0-1356.deb && dpkg -i /tmp/go-agent.deb && rm /tmp/go-agent.deb 7 | 8 | RUN echo "DAEMON=n" > /etc/default/go-agent 9 | 10 | ADD image / 11 | 12 | CMD rm /usr/share/go-agent/.agent-bootstrapper.running; sh /opt/go/start.sh 13 | -------------------------------------------------------------------------------- /go-cd-agent/README.md: -------------------------------------------------------------------------------- 1 | # Go CD Agent 2 | 3 | ## Building 4 | 5 | ```bash 6 | docker build --tag appunite/go-cd-agent:latest . 7 | ``` 8 | 9 | ## Running 10 | 11 | ```bash 12 | docker run -e GO_SERVER=ci.appunite.net -e AGENT_KEY=xxx -e AGENT_RESOURCES=test -e AGENT_ENV=rails -d --name go-cd-agent appunite/go-cd-agent:latest 13 | ``` 14 | 15 | ## TTY 16 | 17 | ```bash 18 | docker run \ 19 | -e GO_SERVER=ci.appunite.net \ 20 | --tty -i \ 21 | appunite/go-cd-agent:14.4.0 /bin/bash 22 | ``` 23 | 24 | -------------------------------------------------------------------------------- /go-cd-agent/image/opt/go/start.sh: -------------------------------------------------------------------------------- 1 | mkdir /usr/share/go-agent/config 2 | 3 | eval `ssh-agent -s` 4 | 5 | cat< /usr/share/go-agent/config/autoregister.properties 6 | agent.auto.register.key=$AGENT_KEY 7 | agent.auto.register.resources=$AGENT_RESOURCES 8 | agent.auto.register.environments=$AGENT_ENV 9 | EOF 10 | 11 | chown go /usr/share/go-agent/config/autoregister.properties 12 | 13 | /usr/share/go-agent/agent.sh -------------------------------------------------------------------------------- /go-cd/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM dockerfile/java:oracle-java7 2 | MAINTAINER Karol Wojtaszek, karol@appunite.com 3 | 4 | RUN wget -O /tmp/go-server.deb http://download.go.cd/gocd-deb/go-server-14.4.0-1356.deb && dpkg -i /tmp/go-server.deb && rm /tmp/go-server.deb 5 | 6 | VOLUME /etc/go 7 | VOLUME /data/artifacts 8 | VOLUME /var/go 9 | 10 | ADD image / 11 | 12 | EXPOSE 8153 13 | EXPOSE 8154 14 | 15 | # OpenLDAP configuration 16 | ENV DEBIAN_FRONTEND noninteractive 17 | RUN apt-get -y update && apt-get -y install slapd ldap-utils && apt-get clean 18 | EXPOSE 389 19 | VOLUME /var/lib/ldap 20 | 21 | CMD sh /opt/go/start.sh 22 | -------------------------------------------------------------------------------- /go-cd/README.md: -------------------------------------------------------------------------------- 1 | # Go CD 2 | 3 | ## Building 4 | 5 | ```bash 6 | docker build --tag appunite/go-cd:14.4.0 . 7 | ``` 8 | 9 | ## Setup 10 | 11 | ```bash 12 | docker run \ 13 | -v /etc/go \ 14 | -v /data/artifacts \ 15 | -v /var/go \ 16 | -v /var/lib/ldap \ 17 | --name go-cd-data busybox true 18 | ``` 19 | 20 | ## Running 21 | 22 | ```bash 23 | docker run -e LDAP_ORGANISATION="AppUnite Sp. z o.o." -e LDAP_DOMAIN="appunite.com" -e LDAP_DC="dc=appunite,dc=com" --volumes-from go-cd-data -p 8153:8153 -p 8154:8154 -d --name go-cd appunite/go-cd:14.4.0 24 | ``` 25 | 26 | ### Logging in 27 | 28 | By default we enabled authentication, default user: 29 | Login: admin 30 | Password: password 31 | 32 | 33 | ## TTY 34 | 35 | ```bash 36 | docker run -e LDAP_ORGANISATION="AppUnite Sp. z o.o." -e LDAP_DOMAIN="appunite.com" -e LDAP_DC="dc=appunite,dc=com" --volumes-from go-cd-data --tty -i appunite/go-cd:14.4.0 /bin/bash 37 | ``` 38 | 39 | ## Nginx proxy 40 | 41 | ``` 42 | server { 43 | listen 80; 44 | 45 | server_name ci.appunite.net ci.appunite.com; 46 | location / { 47 | return 301 https://ci.appunite.net/; 48 | } 49 | } 50 | 51 | server { 52 | listen 443; 53 | server_name ci.appunite.net ci.appunite.com; 54 | 55 | ssl on; 56 | ssl_certificate /etc/nginx/keys/appunite.net.crt; 57 | ssl_certificate_key /etc/nginx/keys/appunite.net.key; 58 | 59 | access_log /var/log/nginx/ci/access.log main; 60 | error_log /var/log/nginx/ci/error.log warn; 61 | 62 | location / { 63 | proxy_pass https://127.0.0.1:8154; 64 | proxy_set_header Host $host; 65 | proxy_set_header X-Real-IP $remote_addr; 66 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 67 | proxy_set_header X-Forwarded-Proto $scheme; 68 | } 69 | } 70 | ``` 71 | 72 | ## Backup 73 | 74 | ```bash 75 | docker run \ 76 | --tty \ 77 | --interactive \ 78 | --volumes-from go-cd-data \ 79 | --volume=$(pwd):/backup \ 80 | ubuntu:14.04 \ 81 | tar zcvf /backup/go-cd_backup_$(date +"%Y-%d-%m_%H%M%S").tar.gz /etc/go /data/artifacts /var/go /var/lib/ldap 82 | ``` 83 | 84 | ## Restore 85 | 86 | ```bash 87 | docker run --volumes-from go-cd-data2 \ 88 | --tty \ 89 | --interactive \ 90 | --volume=$(pwd):/backup \ 91 | ubuntu:14.04 \ 92 | tar -zxvf /backup/go-cd_backup_2015-13-01_120433.tar 93 | ``` -------------------------------------------------------------------------------- /go-cd/image/opt/go/admins.properties: -------------------------------------------------------------------------------- 1 | admin:W6ph5Mm5Pz8GgiULbPgzG37mj9g= -------------------------------------------------------------------------------- /go-cd/image/opt/go/go_init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -x 4 | 5 | if [ ! -e /var/go/docker_bootstrapped ]; then 6 | echo "configuring go" 7 | cp /opt/go/admins.properties /etc/go/admins.properties 8 | 9 | 10 | cat< /etc/go/cruise-config.xml 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | EOF 25 | chown go:go /etc/go/cruise-config.xml 26 | chown go:go /etc/go/admins.properties 27 | 28 | touch /var/go/docker_bootstrapped 29 | else 30 | echo "found already-configured go" 31 | fi 32 | -------------------------------------------------------------------------------- /go-cd/image/opt/go/openldap_init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -x 4 | 5 | if [ ! -e /var/lib/ldap/docker_bootstrapped ]; then 6 | echo "configuring slapd for first run" 7 | 8 | LDAP_ROOTPASS=$(openssl rand -base64 32) 9 | echo $LDAP_ROOTPASS >> /etc/go/ldap_pass 10 | 11 | cat < "${ANDROID_HOME}/licenses/android-sdk-license" 30 | echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "${ANDROID_HOME}/licenses/android-sdk-preview-license" 31 | echo -e "\nd975f751698a77b662f1254ddbeed3901e976f5a" > "${ANDROID_HOME}/licenses/intel-android-extra-license" 32 | ./gradlew --parallel --stacktrace --no-daemon build 33 | ``` 34 | 35 | If you want build with NDK: 36 | 37 | ```bash 38 | # setup android sdk and licenses 39 | export GRADLE_USER_HOME="$(pwd)/.gradle" 40 | export ANDROID_HOME="$(pwd)/.android" 41 | export ANDROID_NDK_HOME="${ANDROID_HOME}/ndk-bundle" 42 | mkdir -p "${ANDROID_HOME}" 43 | if [ ! -f ${ANDROID_HOME}/ndk.zip ]; then wget -O ${ANDROID_HOME}/ndk.zip --quiet https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip; fi 44 | if [ ! -d ${ANDROID_NDK_HOME} ]; then unzip ${ANDROID_HOME}/ndk.zip -d /tmp/ > /dev/null; mv /tmp/* ${ANDROID_NDK_HOME}; ls ${ANDROID_NDK_HOME}/; fi 45 | mkdir -p "${ANDROID_HOME}/licenses" 46 | echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "${ANDROID_HOME}/licenses/android-sdk-license" 47 | echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "${ANDROID_HOME}/licenses/android-sdk-preview-license" 48 | echo -e "\nd975f751698a77b662f1254ddbeed3901e976f5a" > "${ANDROID_HOME}/licenses/intel-android-extra-license" 49 | ./gradlew --parallel --stacktrace --no-daemon build 50 | ``` 51 | 52 | **TIP**: If you are using CI I suggest to cache `.gradle` and `.android` so dependencies will not be downloaded all the time 53 | 54 | 55 | ## Build image 56 | 57 | ```bash 58 | docker build -t jacekmarchwicki/android:java7-8 . 59 | ``` 60 | 61 | If building fail you can debug via where `1b372b1f76f2` is partial build 62 | 63 | ```bash 64 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 65 | ``` 66 | 67 | -------------------------------------------------------------------------------- /java7-8/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /java7-8/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | -------------------------------------------------------------------------------- /jenkins/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM dockerfile/java:oracle-java7 2 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 3 | 4 | # Let's start with some basic stuff. 5 | RUN apt-get update -qq && apt-get install -qqy \ 6 | apt-transport-https \ 7 | ca-certificates \ 8 | curl \ 9 | lxc \ 10 | iptables \ 11 | git \ 12 | wget \ 13 | curl \ 14 | openssh-client \ 15 | python \ 16 | unzip \ 17 | python-openssl \ 18 | openssh-server 19 | 20 | # Install Docker from Docker Inc. repositories. 21 | RUN curl -sSL https://get.docker.com/ubuntu/ | sh 22 | 23 | # Install the magic wrapper. 24 | ADD ./wrapdocker /usr/local/bin/wrapdocker 25 | RUN chmod +x /usr/local/bin/wrapdocker 26 | 27 | # Define additional metadata for our image. 28 | VOLUME /var/lib/docker 29 | 30 | # Install google cloud sdk 31 | RUN mkdir -p /opt && cd /opt/ && wget https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.zip && unzip google-cloud-sdk.zip && rm google-cloud-sdk.zip && google-cloud-sdk/install.sh --usage-reporting=true --path-update=true --bash-completion=true --rc-path=/.bashrc --disable-installation-options 32 | ENV PATH /opt/google-cloud-sdk/bin:$PATH 33 | RUN yes | gcloud components update 34 | ENV CLOUDSDK_CONFIG /jenkins/gcloud 35 | ENV CLOUDSDK_PYTHON_SITEPACKAGES 1 36 | 37 | # Install jenkins 38 | RUN wget --output-document=/opt/jenkins.war http://mirrors.jenkins-ci.org/war/1.607/jenkins.war 39 | RUN chmod 644 /opt/jenkins.war 40 | ENV JENKINS_HOME /jenkins 41 | VOLUME /jenkins 42 | 43 | # Setup slave login 44 | RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config 45 | COPY slave.sh /usr/local/bin/ 46 | ENV ROOT_PASSWORD notasecret 47 | 48 | # install run script 49 | COPY run.sh /usr/local/bin/ 50 | 51 | RUN mkdir -p /opt/workspace 52 | WORKDIR /opt/workspace 53 | 54 | EXPOSE 8080 22 55 | 56 | CMD ["/usr/local/bin/wrapdocker", "/usr/local/bin/run.sh"] 57 | -------------------------------------------------------------------------------- /jenkins/README.md: -------------------------------------------------------------------------------- 1 | # jenkins 2 | 3 | This docker is to build jenkins for git CI with docker integration. 4 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/jenkins/ . 5 | 6 | This docker is based on [dind](https://github.com/jpetazzo/dind), big thanks to its authors. 7 | 8 | ## Build image 9 | 10 | ```bash 11 | docker build --tag jacekmarchwicki/jenkins . 12 | ``` 13 | 14 | If building fail you can debug (where `1b372b1f76f2` is partial build) via: 15 | 16 | ```bash 17 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 18 | ``` 19 | 20 | ## Push build version to repository 21 | 22 | ```bash 23 | docker push jacekmarchwicki/jenkins 24 | ``` 25 | 26 | ## Usage 27 | 28 | ### Create shared jenkins 29 | 30 | ```bash 31 | docker run --volume /jenkins --name jenkins-data busybox true 32 | ``` 33 | 34 | ### Setup google cloud storage login (optional) 35 | * Go to [Google cloud console](https://console.developers.google.com/) 36 | * Open your project 37 | * Go to APIs & auth 38 | * Go to Credentails 39 | * Generate Create new Client ID 40 | * Choose Service Account 41 | * Download p12 key 42 | * Run command: 43 | 44 | ```bash 45 | docker run --volumes-from jenkins-data \ 46 | --volume :/tmp/your-key.p12 \ 47 | --tty \ 48 | --interactive \ 49 | --publish 8080:8080 \ 50 | --privileged \ 51 | --rm jacekmarchwicki/jenkins \ 52 | gcloud auth activate-service-account --key-file /tmp/your-key.p12 --project 53 | ``` 54 | 55 | ### Run jenkins and docker 56 | 57 | ```bash 58 | docker run --volumes-from jenkins-data \ 59 | --tty \ 60 | --interactive \ 61 | --publish 8080:8080 \ 62 | --privileged \ 63 | --rm jacekmarchwicki/jenkins 64 | ``` 65 | 66 | ### Debug 67 | To look on `/jenkins` directory you can run ubuntu docker in interactive mode 68 | 69 | ```bash 70 | docker run --interactive \ 71 | --tty \ 72 | --volumes-from jenkins-data \ 73 | --publish 8080:8080 \ 74 | --privileged \ 75 | --rm \ 76 | jacekmarchwicki/jenkins \ 77 | /bin/bash 78 | ``` 79 | 80 | ### Backup 81 | 82 | ```bash 83 | docker run \ 84 | --tty \ 85 | --interactive \ 86 | --volumes-from jenkins-data \ 87 | --volume=$(pwd):/backup \ 88 | ubuntu:12.04 \ 89 | tar --exclude='/jenkins/jobs/*/workspace/*' -zcvf /backup/jenkins_backup_$(date +"%Y-%d-%m_%H%M%S").tar.gz /jenkins 90 | ``` 91 | 92 | ### Restore 93 | 94 | ```bash 95 | docker run --volume /jenkins \ 96 | --tty \ 97 | --interactive \ 98 | --name jenkins-data2 \ 99 | busybox \ 100 | true 101 | docker run --volumes-from jenkins-data2 \ 102 | --tty \ 103 | --interactive \ 104 | --volume=$(pwd):/backup \ 105 | busybox \ 106 | tar xvf /backup/backup.tar 107 | docker run --volumes-from jenkins-data2 \ 108 | --tty \ 109 | --interactive \ 110 | --publish 8081:8080 \ 111 | --privileged \ 112 | --rm \ 113 | jacekmarchwicki/jenkins 114 | ``` 115 | 116 | Now your restored jenkins should be visible on port `8081`. 117 | 118 | You can remove your restored volume by 119 | 120 | ```bash 121 | docker rm jenkins-data2 122 | ``` 123 | 124 | ## Running build inside jenkins docker 125 | Add to your build script 126 | 127 | ```bash 128 | # Test connection to docker 129 | docker version || exit 1 130 | 131 | # Copy your keystore 132 | gsutil cp gs:///keystores/your-key.keystore Yapert/your-key.keystore || exit 1 133 | 134 | cat > script.sh << EOF 135 | #!/bin/bash 136 | ./gradlew build 137 | EOF 138 | chmod u+x script.sh || exit 1 139 | 140 | docker run --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android-test "/opt/workspace/script.sh" || exit 1 141 | ``` 142 | 143 | ## Running slave 144 | docker run \ 145 | --tty \ 146 | --interactive \ 147 | --publish 21:21 \ 148 | --privileged \ 149 | --rm \ 150 | --env ROOT_PASSWORD=some-password \ 151 | jacekmarchwicki/jenkins \ 152 | wrapdocker slave.sh 153 | 154 | 155 | -------------------------------------------------------------------------------- /jenkins/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export JAVA_OPTS="-XX:MaxPermSize=4096m -Xms4096m -Xmx8192m" 4 | java -jar /opt/jenkins.war $@ 5 | -------------------------------------------------------------------------------- /jenkins/slave.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "root:${ROOT_PASSWORD:-notasecret}" | chpasswd 4 | 5 | if [ ! -d /var/run/sshd ]; then 6 | mkdir /var/run/sshd 7 | chmod 0755 /var/run/sshd 8 | fi 9 | 10 | /usr/sbin/sshd -D 11 | -------------------------------------------------------------------------------- /jenkins/wrapdocker: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # First, make sure that cgroups are mounted correctly. 4 | CGROUP=/sys/fs/cgroup 5 | : {LOG:=stdio} 6 | 7 | [ -d $CGROUP ] || 8 | mkdir $CGROUP 9 | 10 | mountpoint -q $CGROUP || 11 | mount -n -t tmpfs -o uid=0,gid=0,mode=0755 cgroup $CGROUP || { 12 | echo "Could not make a tmpfs mount. Did you use --privileged?" 13 | exit 1 14 | } 15 | 16 | if [ -d /sys/kernel/security ] && ! mountpoint -q /sys/kernel/security 17 | then 18 | mount -t securityfs none /sys/kernel/security || { 19 | echo "Could not mount /sys/kernel/security." 20 | echo "AppArmor detection and --privileged mode might break." 21 | } 22 | fi 23 | 24 | # Mount the cgroup hierarchies exactly as they are in the parent system. 25 | for SUBSYS in $(cut -d: -f2 /proc/1/cgroup) 26 | do 27 | [ -d $CGROUP/$SUBSYS ] || mkdir $CGROUP/$SUBSYS 28 | mountpoint -q $CGROUP/$SUBSYS || 29 | mount -n -t cgroup -o $SUBSYS cgroup $CGROUP/$SUBSYS 30 | 31 | # The two following sections address a bug which manifests itself 32 | # by a cryptic "lxc-start: no ns_cgroup option specified" when 33 | # trying to start containers withina container. 34 | # The bug seems to appear when the cgroup hierarchies are not 35 | # mounted on the exact same directories in the host, and in the 36 | # container. 37 | 38 | # Named, control-less cgroups are mounted with "-o name=foo" 39 | # (and appear as such under /proc//cgroup) but are usually 40 | # mounted on a directory named "foo" (without the "name=" prefix). 41 | # Systemd and OpenRC (and possibly others) both create such a 42 | # cgroup. To avoid the aforementioned bug, we symlink "foo" to 43 | # "name=foo". This shouldn't have any adverse effect. 44 | echo $SUBSYS | grep -q ^name= && { 45 | NAME=$(echo $SUBSYS | sed s/^name=//) 46 | ln -s $SUBSYS $CGROUP/$NAME 47 | } 48 | 49 | # Likewise, on at least one system, it has been reported that 50 | # systemd would mount the CPU and CPU accounting controllers 51 | # (respectively "cpu" and "cpuacct") with "-o cpuacct,cpu" 52 | # but on a directory called "cpu,cpuacct" (note the inversion 53 | # in the order of the groups). This tries to work around it. 54 | [ $SUBSYS = cpuacct,cpu ] && ln -s $SUBSYS $CGROUP/cpu,cpuacct 55 | done 56 | 57 | # Note: as I write those lines, the LXC userland tools cannot setup 58 | # a "sub-container" properly if the "devices" cgroup is not in its 59 | # own hierarchy. Let's detect this and issue a warning. 60 | grep -q :devices: /proc/1/cgroup || 61 | echo "WARNING: the 'devices' cgroup should be in its own hierarchy." 62 | grep -qw devices /proc/1/cgroup || 63 | echo "WARNING: it looks like the 'devices' cgroup is not mounted." 64 | 65 | # Now, close extraneous file descriptors. 66 | pushd /proc/self/fd >/dev/null 67 | for FD in * 68 | do 69 | case "$FD" in 70 | # Keep stdin/stdout/stderr 71 | [012]) 72 | ;; 73 | # Nuke everything else 74 | *) 75 | eval exec "$FD>&-" 76 | ;; 77 | esac 78 | done 79 | popd >/dev/null 80 | 81 | 82 | # If a pidfile is still around (for example after a container restart), 83 | # delete it so that docker can start. 84 | rm -rf /var/run/docker.pid 85 | 86 | # If we were given a PORT environment variable, start as a simple daemon; 87 | # otherwise, spawn a shell as well 88 | if [ "$PORT" ] 89 | then 90 | exec docker -d -H 0.0.0.0:$PORT $DOCKER_DAEMON_ARGS 91 | else 92 | if [ "$LOG" == "file" ] 93 | then 94 | docker -d $DOCKER_DAEMON_ARGS &>/var/log/docker.log & 95 | else 96 | docker -d $DOCKER_DAEMON_ARGS & 97 | fi 98 | sleep 3 99 | docker ps || exit 1 100 | exec ${1-bash} 101 | fi 102 | -------------------------------------------------------------------------------- /nginx-confd/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | RUN apt-get update && apt-get install -y --force-yes wget apache2-utils && apt-get clean 6 | # Install confd 7 | RUN wget --no-check-certificate --output-document=/usr/local/bin/confd https://github.com/kelseyhightower/confd/releases/download/v0.7.1/confd-0.7.1-linux-amd64 && chmod +x /usr/local/bin/confd 8 | 9 | # Prepare config files 10 | RUN mkdir -p /etc/confd/{conf.d,templates} 11 | COPY conf.d /etc/confd/conf.d 12 | COPY templates /etc/confd/templates 13 | 14 | # startup scripts 15 | COPY scripts/ /usr/local/bin 16 | 17 | # Setup nginx 18 | RUN rm /etc/nginx/conf.d/* 19 | RUN mkdir /etc/nginx/keys 20 | COPY nginx /etc/nginx 21 | 22 | 23 | EXPOSE 80 24 | EXPOSE 443 25 | 26 | CMD ["/usr/local/bin/boot.sh"] 27 | -------------------------------------------------------------------------------- /nginx-confd/README.md: -------------------------------------------------------------------------------- 1 | # nginx-confd 2 | 3 | This docker is usefull for using nginx with confd. 4 | For examples please look at [How To Use Confd and Etcd to Dynamically Reconfigure Services in CoreOS](https://www.digitalocean.com/community/tutorials/how-to-use-confd-and-etcd-to-dynamically-reconfigure-services-in-coreos) 5 | 6 | ## Build image 7 | 8 | ```bash 9 | docker build -t appunite/nginx-confd . 10 | ``` 11 | 12 | If building fail you can debug via where `1b372b1f76f2` is partial build 13 | 14 | ```bash 15 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 16 | ``` 17 | 18 | ## Push build version to repository 19 | 20 | ```bash 21 | docker push appunite/nginx-confd 22 | ``` 23 | 24 | ## Usage 25 | Generate your certificates: 26 | 27 | ```bash 28 | openssl genrsa -des3 -out www-server-withpass.key 2048 29 | openssl rsa -in www-server-withpass.key -out www-server.key 30 | openssl req -new -key www-server.key -out www-server.csr 31 | openssl x509 -req -days 365 -in www-server.csr -signkey www-server.key -out www-server.crt 32 | 33 | 34 | openssl genrsa -des3 -out test-server-withpass.key 2048 35 | openssl rsa -in test-server-withpass.key -out test-server.key 36 | openssl req -new -key test-server.key -out test-server.csr 37 | openssl x509 -req -days 365 -in test-server.csr -signkey test-server.key -out test-server.crt 38 | ``` 39 | 40 | Configure your `etcdctl`: 41 | 42 | ```bash 43 | etcdctl mkdir /services/nginx/www/ 44 | etcdctl mkdir /services/nginx/www/servers/ 45 | etcdctl set /services/nginx/www/root 'www.example.com' 46 | cat www-server.crt | etcdctl set /services/nginx/www/ssl-crt 47 | cat www-server.key | etcdctl set /services/nginx/www/ssl-key 48 | etcdctl set /services/nginx/www/servers/1 '{"ip": "10.0.0.3", "port": "80"}' 49 | etcdctl set /services/nginx/www/servers/2 '{"ip": "10.0.0.4", "port": "80"}' 50 | 51 | etcdctl mkdir /services/nginx/test/ 52 | etcdctl mkdir /services/nginx/test/servers/ 53 | etcdctl set /services/nginx/test/root 'test.example.com' 54 | cat test-server.crt | etcdctl set /services/nginx/test/ssl-crt 55 | cat test-server.key | etcdctl set /services/nginx/test/ssl-key 56 | etcdctl set /services/nginx/test/servers/1 '{"ip": "10.0.0.1", "port": "80"}' 57 | etcdctl set /services/nginx/test/servers/2 '{"ip": "10.0.0.2", "port": "80"}' 58 | ``` 59 | 60 | Change directory to your project directory, than run: 61 | 62 | ```bash 63 | docker run \ 64 | --rm \ 65 | --tty \ 66 | --interactive \ 67 | --name=nginx \ 68 | --publish 80:80 \ 69 | --publish 443:443 \ 70 | appunite/nginx-confd 71 | ``` 72 | 73 | ## How you doin 74 | 75 | Directories 76 | * `nginx` nginx configuration 77 | * `conf.d` confd [templete resources](https://github.com/kelseyhightower/confd/blob/master/docs/template-resources.md) 78 | * `templates` confd [templates](https://github.com/kelseyhightower/confd/blob/master/docs/templates.md) 79 | * `scripts` startup scripts 80 | 81 | ## For restricted basic auth access use 82 | 83 | ```bash 84 | etcdctl set /services/nginx/test/restrict true 85 | etcdctl mkdir /services/nginx/test/restrict-users 86 | etcdctl set /services/nginx/test/restrict-users/root some_password 87 | ``` 88 | 89 | -------------------------------------------------------------------------------- /nginx-confd/conf.d/nginx-keys.toml: -------------------------------------------------------------------------------- 1 | [template] 2 | 3 | # The name of the template that will be used to render the application's configuration file 4 | # Confd will look in `/etc/conf.d/templates` for these files by default 5 | src = "nginx-keys.tmpl" 6 | 7 | # The location to place the rendered configuration file 8 | dest = "/etc/nginx/nginx-keys.sh" 9 | 10 | # The etcd keys or directory to watch. This is where the information to fill in 11 | # the template will come from. 12 | keys = [ "/services/nginx" ] 13 | 14 | # File ownership and mode information 15 | owner = "root" 16 | mode = "0755" 17 | 18 | # These are the commands that will be used to check whether the rendered config is 19 | # valid and to reload the actual service once the new config is in place 20 | #check_cmd = "/usr/sbin/nginx -t" 21 | reload_cmd = "/etc/nginx/nginx-keys.sh" 22 | -------------------------------------------------------------------------------- /nginx-confd/conf.d/nginx.toml: -------------------------------------------------------------------------------- 1 | [template] 2 | 3 | # The name of the template that will be used to render the application's configuration file 4 | # Confd will look in `/etc/conf.d/templates` for these files by default 5 | src = "nginx.tmpl" 6 | 7 | # The location to place the rendered configuration file 8 | dest = "/etc/nginx/conf.d/app.conf" 9 | 10 | # The etcd keys or directory to watch. This is where the information to fill in 11 | # the template will come from. 12 | keys = [ "/services/nginx" ] 13 | 14 | # File ownership and mode information 15 | owner = "root" 16 | mode = "0644" 17 | 18 | # These are the commands that will be used to check whether the rendered config is 19 | # valid and to reload the actual service once the new config is in place 20 | check_cmd = "/usr/sbin/nginx -t" 21 | reload_cmd = "/usr/sbin/service nginx reload" 22 | -------------------------------------------------------------------------------- /nginx-confd/nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | user nginx; 2 | worker_processes 1; 3 | 4 | error_log /var/log/nginx/error.log warn; 5 | pid /var/run/nginx.pid; 6 | 7 | events { 8 | worker_connections 1024; 9 | } 10 | 11 | http { 12 | include /etc/nginx/mime.types; 13 | default_type application/octet-stream; 14 | 15 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 16 | '$status $body_bytes_sent "$http_referer" ' 17 | '"$http_user_agent" "$http_x_forwarded_for"'; 18 | 19 | access_log /var/log/nginx/access.log main; 20 | 21 | sendfile on; 22 | #tcp_nopush on; 23 | 24 | keepalive_timeout 65; 25 | 26 | #gzip on; 27 | 28 | include /etc/nginx/conf.d/*.conf; 29 | } 30 | -------------------------------------------------------------------------------- /nginx-confd/scripts/boot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Fail hard and fast 4 | set -eo pipefail 5 | 6 | export ETCD_PORT=${ETCD_PORT:-4001} 7 | export HOST_IP=${HOST_IP:-172.17.42.1} 8 | export ETCD=$HOST_IP:4001 9 | 10 | echo "[nginx] booting container. ETCD: $ETCD" 11 | 12 | # Loop until confd has updated the nginx config 13 | until confd -onetime -node $ETCD -config-file /etc/confd/conf.d/nginx-keys.toml; do 14 | echo "[nginx] waiting for confd to refresh nginx.conf" 15 | sleep 5 16 | done 17 | until confd -onetime -node $ETCD -config-file /etc/confd/conf.d/nginx.toml; do 18 | echo "[nginx] waiting for confd to refresh nginx.conf" 19 | sleep 5 20 | done 21 | 22 | # Run confd in the background to watch the upstream servers 23 | confd -interval 10 -node $ETCD -config-file /etc/confd/conf.d/nginx-keys.toml & 24 | confd -interval 10 -node $ETCD -config-file /etc/confd/conf.d/nginx.toml & 25 | echo "[nginx] confd is listening for changes on etcd..." 26 | 27 | # Start nginx 28 | echo "[nginx] starting nginx service..." 29 | service nginx start 30 | 31 | # Tail all nginx log files 32 | tail -f /var/log/nginx/*.log 33 | -------------------------------------------------------------------------------- /nginx-confd/templates/nginx-keys.tmpl: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | {{range $dir := lsdir "/services/nginx"}} 3 | 4 | {{$filename := base $dir}} 5 | # {{$filename}} 6 | 7 | {{$sslcrt := printf "/services/nginx/%s/ssl-crt" $filename}} 8 | {{if exists $sslcrt}} 9 | echo "{{getv $sslcrt}}" > /etc/nginx/keys/{{$filename}}.crt 10 | 11 | {{$sslkey := printf "/services/nginx/%s/ssl-key" $filename}} 12 | echo "{{getv $sslkey}}" > /etc/nginx/keys/{{$filename}}.key 13 | {{end}} 14 | 15 | {{$restrict := printf "/services/nginx/%s/restrict" $filename}} 16 | {{if exists $restrict}} 17 | {{$htpassword := printf "/etc/nginx/keys/%s.htpasswd" $filename }} 18 | rm {{$htpassword}} 19 | touch {{$htpassword}} 20 | 21 | {{$restrictusers := printf "/services/nginx/%s/restrict-users" $filename}} 22 | {{range $restriction := ls $restrictusers}} 23 | {{$key := printf "/services/nginx/%s/restrict-users/%s" $filename $restriction}} 24 | # {{$restriction}} 25 | {{$password := getv $key}} 26 | htpasswd -b {{$htpassword}} {{$restriction}} "{{$password}}" 27 | {{end}} 28 | {{end}} 29 | 30 | {{end}} 31 | -------------------------------------------------------------------------------- /nginx-confd/templates/nginx.tmpl: -------------------------------------------------------------------------------- 1 | {{range $dir := lsdir "/services/nginx"}} 2 | 3 | {{$filename := base $dir}} 4 | {{$custdir := printf "/services/nginx/%s/servers/" $filename}} 5 | {{if ne (len (ls $custdir)) 0}} 6 | upstream {{$filename}} { 7 | {{$custdir := printf "/services/nginx/%s/servers/" $filename}} 8 | {{range ls $custdir}} 9 | {{$key := printf "/services/nginx/%s/servers/%s" $filename .}} 10 | {{$value := getv $key}} 11 | server {{$data := json $value}}{{$data.ip}}:{{$data.port}}; 12 | {{end}} 13 | } 14 | {{else}} 15 | upstream {{$filename}} { 16 | server localhost; 17 | } 18 | {{end}} 19 | 20 | 21 | {{$servernamedir := printf "/services/nginx/%s/root" $filename}} 22 | 23 | server { 24 | listen 80; 25 | 26 | server_name {{getv $servernamedir}}; 27 | location / { 28 | return 301 https://$host$request_uri$is_args$args; 29 | } 30 | } 31 | 32 | server { 33 | listen 443 ssl spdy; 34 | server_name {{getv $servernamedir}}; 35 | 36 | client_max_body_size 400m; 37 | 38 | {{$sslcrt := printf "/services/nginx/%s/ssl-crt" $filename}} 39 | {{if exists $sslcrt}} 40 | ssl on; 41 | ssl_certificate /etc/nginx/keys/{{$filename}}.crt; 42 | ssl_certificate_key /etc/nginx/keys/{{$filename}}.key; 43 | 44 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 45 | ssl_session_cache shared:SSL:10m; 46 | ssl_session_timeout 10m; 47 | ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"; 48 | ssl_prefer_server_ciphers on; 49 | 50 | add_header Alternate-Protocol 443:npn-spdy/3; 51 | add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;"; 52 | 53 | spdy_headers_comp 7; 54 | ssl_buffer_size 1400; 55 | ssl_session_tickets on; 56 | 57 | ssl_stapling on; 58 | ssl_stapling_verify on; 59 | resolver 8.8.4.4 8.8.8.8 valid=300s; 60 | resolver_timeout 10s; 61 | {{end}} 62 | location / { 63 | proxy_pass http://{{$filename}}; 64 | proxy_redirect off; 65 | proxy_set_header Host $host; 66 | proxy_set_header X-Real-IP $remote_addr; 67 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 68 | proxy_set_header X-Forwarded-Proto $scheme; 69 | {{$restrict := printf "/services/nginx/%s/restrict" $filename}} 70 | {{if exists $restrict}} 71 | {{$htpassword := printf "/etc/nginx/keys/%s.htpasswd" $filename }} 72 | auth_basic "Restricted"; 73 | auth_basic_user_file {{$htpassword}}; 74 | {{end}} 75 | } 76 | } 77 | {{end}} -------------------------------------------------------------------------------- /ubuntu-16-04-java7-8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:16.04 2 | 3 | MAINTAINER Jacek Marchwicki "jacek.marchwicki@gmail.com" 4 | 5 | # Install java7 6 | RUN apt-get update && \ 7 | apt-get install -y software-properties-common && \ 8 | add-apt-repository -y ppa:webupd8team/java && \ 9 | (echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 10 | apt-get update && \ 11 | apt-get install -y oracle-java7-installer && \ 12 | apt-get clean && \ 13 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 14 | ENV JAVA7_HOME /usr/lib/jvm/java-7-oracle 15 | 16 | # Install java8 17 | RUN apt-get update && \ 18 | apt-get install -y software-properties-common && \ 19 | add-apt-repository -y ppa:webupd8team/java && \ 20 | (echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections) && \ 21 | apt-get update && \ 22 | apt-get install -y oracle-java8-installer && \ 23 | apt-get clean && \ 24 | rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 25 | ENV JAVA8_HOME /usr/lib/jvm/java-8-oracle 26 | ENV JAVA_HOME /usr/lib/jvm/java-8-oracle 27 | 28 | # Install Deps 29 | RUN dpkg --add-architecture i386 && apt-get update && apt-get install -y --force-yes unzip expect git wget libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 python curl libqt5widgets5 && apt-get clean && rm -fr /var/lib/apt/lists/* /tmp/* /var/tmp/* 30 | 31 | # Copy install tools 32 | COPY tools /opt/tools 33 | ENV PATH ${PATH}:/opt/tools 34 | 35 | # GO to workspace 36 | RUN mkdir -p /opt/workspace 37 | WORKDIR /opt/workspace 38 | -------------------------------------------------------------------------------- /ubuntu-16-04-java7-8/README.md: -------------------------------------------------------------------------------- 1 | # android java7 and java8 (with NDK) 2 | 3 | This docker is to build Android Gradle project with Java 7 and Java 8. 4 | It is available on Docker Hub https://registry.hub.docker.com/u/jacekmarchwicki/android/ . 5 | 6 | Other images with android tools are deprecated 7 | 8 | Ubuntu: 16.04 9 | 10 | ## Setting default java: 11 | * java8 (default) `update-java-alternatives --set java-8-oracle`, directory: `/usr/lib/jvm/java-8-oracle`, env: `$JAVA8_HOME` and `$JAVA_HOME` 12 | * java7 `update-java-alternatives --set java-7-oracle`, directory: `/usr/lib/jvm/java-7-oracle`, env: `$JAVA7_HOME` 13 | 14 | ## Build your app inside docker 15 | 16 | Enter to docker in your project directory: 17 | 18 | ```bash 19 | docker run --tty --interactive --volume=$(pwd):/opt/workspace --workdir=/opt/workspace --rm jacekmarchwicki/android:ubuntu-16-04-java7-8 /bin/sh 20 | ``` 21 | 22 | Then inside docker 23 | 24 | ```bash 25 | # setup android sdk and licenses 26 | export GRADLE_USER_HOME="$(pwd)/.gradle" 27 | export ANDROID_HOME="$(pwd)/.android" 28 | mkdir -p "${ANDROID_HOME}/licenses" 29 | echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55\nd56f5187479451eabf01fb78af6dfcb131a6481e" > "${ANDROID_HOME}/licenses/android-sdk-license" 30 | echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "${ANDROID_HOME}/licenses/android-sdk-preview-license" 31 | echo -e "\nd975f751698a77b662f1254ddbeed3901e976f5a" > "${ANDROID_HOME}/licenses/intel-android-extra-license" 32 | ./gradlew --parallel --stacktrace --no-daemon build 33 | ``` 34 | 35 | If you want build with NDK: 36 | 37 | ```bash 38 | # setup android sdk and licenses 39 | export GRADLE_USER_HOME="$(pwd)/.gradle" 40 | export ANDROID_HOME="$(pwd)/.android" 41 | export ANDROID_NDK_HOME="${ANDROID_HOME}/ndk-bundle" 42 | mkdir -p "${ANDROID_HOME}" 43 | if [ ! -f ${ANDROID_HOME}/ndk.zip ]; then wget -O ${ANDROID_HOME}/ndk.zip --quiet https://dl.google.com/android/repository/android-ndk-r13b-linux-x86_64.zip; fi 44 | if [ ! -d ${ANDROID_NDK_HOME} ]; then unzip ${ANDROID_HOME}/ndk.zip -d /tmp/ > /dev/null; mv /tmp/* ${ANDROID_NDK_HOME}; ls ${ANDROID_NDK_HOME}/; fi 45 | mkdir -p "${ANDROID_HOME}/licenses" 46 | echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "${ANDROID_HOME}/licenses/android-sdk-license" 47 | echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "${ANDROID_HOME}/licenses/android-sdk-preview-license" 48 | echo -e "\nd975f751698a77b662f1254ddbeed3901e976f5a" > "${ANDROID_HOME}/licenses/intel-android-extra-license" 49 | ./gradlew --parallel --stacktrace --no-daemon build 50 | ``` 51 | 52 | **TIP**: If you are using CI I suggest to cache `.gradle` and `.android` so dependencies will not be downloaded all the time 53 | 54 | ## Build image 55 | 56 | ```bash 57 | docker build -t jacekmarchwicki/android:ubuntu-16-04-java7-8 . 58 | ``` 59 | 60 | If building fail you can debug via where `1b372b1f76f2` is partial build 61 | 62 | ```bash 63 | docker run --tty --interactive --rm 1b372b1f76f2 /bin/bash 64 | ``` 65 | 66 | -------------------------------------------------------------------------------- /ubuntu-16-04-java7-8/tools/android-accept-licenses.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect -f 2 | 3 | set timeout 1800 4 | set cmd [lindex $argv 0] 5 | set licenses [lindex $argv 1] 6 | 7 | spawn {*}$cmd 8 | expect { 9 | "Do you accept the license '*'*" { 10 | exp_send "y\r" 11 | exp_continue 12 | } 13 | eof 14 | } 15 | -------------------------------------------------------------------------------- /ubuntu-16-04-java7-8/tools/android-wait-for-emulator.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Originally written by Ralf Kistner , but placed in the public domain 4 | 5 | set +e 6 | 7 | bootanim="" 8 | failcounter=0 9 | until [[ "$bootanim" =~ "stopped" ]]; do 10 | bootanim=`adb -e shell getprop init.svc.bootanim 2>&1` 11 | echo "$bootanim" 12 | if [[ "$bootanim" =~ "not found" ]]; then 13 | let "failcounter += 1" 14 | if [[ $failcounter -gt 15 ]]; then 15 | echo "Failed to start emulator" 16 | exit 1 17 | fi 18 | fi 19 | sleep 1 20 | done 21 | echo "Done" 22 | --------------------------------------------------------------------------------