From f8500d15da9c1e898c2c1196e540c3d1e8229573 Mon Sep 17 00:00:00 2001 From: Febbweiss Date: Thu, 4 Feb 2016 14:49:21 +0100 Subject: [PATCH] Feature: Docker images for go-server and go-agents for jdk8, nodejs and cloudfoundry --- .gitignore | 2 + docker-compose.yml | 45 ++++++++++++ gocd-agent-cloudfoundry/Dockerfile | 29 ++++++++ .../autoregister.properties | 2 + gocd-agent-jdk8/Dockerfile | 40 +++++++++++ gocd-agent-jdk8/autoregister.properties | 2 + gocd-agent-nodejs/Dockerfile | 29 ++++++++ gocd-agent-nodejs/autoregister.properties | 2 + gocd-agent/Dockerfile | 57 +++++++++++++++ gocd-agent/autoregister.properties | 2 + gocd-server/Dockerfile | 69 +++++++++++++++++++ 11 files changed, 279 insertions(+) create mode 100644 .gitignore create mode 100644 docker-compose.yml create mode 100644 gocd-agent-cloudfoundry/Dockerfile create mode 100644 gocd-agent-cloudfoundry/autoregister.properties create mode 100644 gocd-agent-jdk8/Dockerfile create mode 100644 gocd-agent-jdk8/autoregister.properties create mode 100644 gocd-agent-nodejs/Dockerfile create mode 100644 gocd-agent-nodejs/autoregister.properties create mode 100644 gocd-agent/Dockerfile create mode 100644 gocd-agent/autoregister.properties create mode 100644 gocd-server/Dockerfile diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2534c41 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**/binaries/ +mnt/ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..8d2a0f5 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,45 @@ +gocd-server: + build: gocd-server/. + ports: + - "8153:8153" + volumes: + - ./mnt/var/lib/go-server:/var/lib/go-server + - ./mnt/etc/go:/etc/go + - ./mnt/var/log/go-server:/var/log/go-server + environment: + - AGENT_KEY=opensaasgocd +gocd-agent: + build: gocd-agent/. + links: + - gocd-server + environment: + - AGENT_KEY=opensaasgocd + - GO_SERVER=gocd-server + - GO_SERVER_PORT=8153 +gocd-agent-jdk8: + build: gocd-agent/. + links: + - gocd-server + environment: + - AGENT_KEY=opensaasgocd + - AGENT_RESOURCES=java + - GO_SERVER=gocd-server + - GO_SERVER_PORT=8153 +gocd-agent-nodejs: + build: gocd-agent/. + links: + - gocd-server + environment: + - AGENT_KEY=opensaasgocd + - AGENT_RESOURCES=node + - GO_SERVER=gocd-server + - GO_SERVER_PORT=8153 +gocd-agent-cloudfoundry: + build: gocd-agent/. + links: + - gocd-server + environment: + - AGENT_KEY=opensaasgocd + - AGENT_RESOURCES=cf + - GO_SERVER=gocd-server + - GO_SERVER_PORT=8153 diff --git a/gocd-agent-cloudfoundry/Dockerfile b/gocd-agent-cloudfoundry/Dockerfile new file mode 100644 index 0000000..757d025 --- /dev/null +++ b/gocd-agent-cloudfoundry/Dockerfile @@ -0,0 +1,29 @@ +FROM debian + +RUN apt-get clean && apt-get update \ + && apt-get install -y curl \ + && apt-get clean \ + && rm -rf /var/lib/apt/listss/* + +# Installing CloudFoundry +RUN cd /tmp \ + && curl -sL -o cf-cli-installer_6.15.0_x86-64.deb "https://cli.run.pivotal.io/stable?release=debian64&version=6.15.0&source=github-rel" \ + && dpkg -i -E cf-cli-installer_6.15.0_x86-64.deb \ + && cf add-plugin-repo bluemix-cf-staging http://plugins.ng.bluemix.net >/dev/null 2>&1 + +# Installing Go agent +RUN cd /tmp \ + && curl -sL -o go-agent.deb "https://download.go.cd/gocd-deb/go-agent-15.2.0-2248.deb" \ + && dpkg -i -E go-agent.deb \ + && sed -i -e 's#GO_SERVER=127.0.0.1#GO_SERVER=gocd-server#' /etc/default/go-agent + +#VOLUME ["/var/lib/go-agent", "/var/log/go-agent", "/var/go/.ssh"] + +COPY autoregister.properties /var/lib/go-agent/config/autoregister.properties + +CMD until curl -s -o /dev/null "http://${GO_SERVER}:${GO_SERVER_PORT}"; do sleep 5; done; \ + if [ -n "$AGENT_KEY" ]]; then \ + sed -i -e 's/=.*/=/g' -e "s/key=/key=$AGENT_KEY/" -e "s/resources=/resources=$AGENT_RESOURCES/" /var/lib/go-agent/config/autoregister.properties; \ + fi; \ + (/usr/share/go-agent/agent.sh &); while [ ! -f /var/log/go-agent/go-agent-bootstrapper.log ]; do sleep 1; done; exec tail -F /var/log/go-agent/* + diff --git a/gocd-agent-cloudfoundry/autoregister.properties b/gocd-agent-cloudfoundry/autoregister.properties new file mode 100644 index 0000000..0ad1f33 --- /dev/null +++ b/gocd-agent-cloudfoundry/autoregister.properties @@ -0,0 +1,2 @@ +agent.auto.register.key= +agent.auto.register.resources= diff --git a/gocd-agent-jdk8/Dockerfile b/gocd-agent-jdk8/Dockerfile new file mode 100644 index 0000000..7cfbe0c --- /dev/null +++ b/gocd-agent-jdk8/Dockerfile @@ -0,0 +1,40 @@ +FROM debian + +RUN apt-get clean && apt-get update \ + && apt-get install -y curl +RUN apt-get clean && apt-get install -y maven +RUN apt-get clean && apt-get install -y gradle \ + && apt-get clean \ + && rm -rf /var/lib/apt/listss/* + +WORKDIR /opt +#RUN curl -sL -o - --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" -q "http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz" | tar xzf - +ADD binaries/jdk-8u66-linux-x64.tar.gz /opt/. +RUN update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_66/bin/java 120 \ + && update-alternatives --install /usr/bin/keytool keytool /opt/jdk1.8.0_66/bin/keytool 120\ + && update-alternatives --install /usr/bin/rmiregistry rmiregistry /opt/jdk1.8.0_66/bin/rmiregistry 120\ + && update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_66/bin/javac 120 \ + --slave /usr/bin/jar jar /opt/jdk1.8.0_66/bin/jar \ + --slave /usr/bin/rmic rmic /opt/jdk1.8.0_66/bin/rmic\ + && update-alternatives --set java /opt/jdk1.8.0_66/bin/java\ + && update-alternatives --set keytool /opt/jdk1.8.0_66/bin/keytool \ + && update-alternatives --set rmiregistry /opt/jdk1.8.0_66/bin/rmiregistry \ + && echo "export JAVA_HOME=/opt/jdk1.8.0_66" >> /.profile + +# Installing Go agent +RUN cd /tmp \ + && curl -sL -o go-agent.deb "https://download.go.cd/gocd-deb/go-agent-15.2.0-2248.deb" \ + && dpkg -i -E go-agent.deb \ + && sed -i -e 's#GO_SERVER=127.0.0.1#GO_SERVER=gocd-server#' /etc/default/go-agent \ + && sed -i -e 's#JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/jre"#JAVA_HOME="/opt/jdk1.8.0_66/jre"#' /etc/default/go-agent + +#VOLUME ["/var/lib/go-agent", "/var/log/go-agent", "/var/go/.ssh"] + +COPY autoregister.properties /var/lib/go-agent/config/autoregister.properties + +CMD until curl -s -o /dev/null "http://${GO_SERVER}:${GO_SERVER_PORT}"; do sleep 5; done; \ + if [ -n "$AGENT_KEY" ]]; then \ + sed -i -e 's/=.*/=/g' -e "s/key=/key=$AGENT_KEY/" -e "s/resources=/resources=$AGENT_RESOURCES/" /var/lib/go-agent/config/autoregister.properties; \ + fi; \ + (/usr/share/go-agent/agent.sh &); while [ ! -f /var/log/go-agent/go-agent-bootstrapper.log ]; do sleep 1; done; exec tail -F /var/log/go-agent/* + diff --git a/gocd-agent-jdk8/autoregister.properties b/gocd-agent-jdk8/autoregister.properties new file mode 100644 index 0000000..0ad1f33 --- /dev/null +++ b/gocd-agent-jdk8/autoregister.properties @@ -0,0 +1,2 @@ +agent.auto.register.key= +agent.auto.register.resources= diff --git a/gocd-agent-nodejs/Dockerfile b/gocd-agent-nodejs/Dockerfile new file mode 100644 index 0000000..367a9ec --- /dev/null +++ b/gocd-agent-nodejs/Dockerfile @@ -0,0 +1,29 @@ +FROM debian + +RUN apt-get clean && apt-get update \ + && apt-get install -y curl +RUN apt-get clean && apt-get install -y python-dev +RUN curl -sL https://deb.nodesource.com/setup_5.x | bash -E - \ + && apt-get update \ + && apt-get install -y \ + build-essential \ + nodejs + && apt-get clean \ + && rm -rf /var/lib/apt/listss/* + +# Installing Go agent +RUN cd /tmp \ + && curl -sL -o go-agent.deb "https://download.go.cd/gocd-deb/go-agent-15.2.0-2248.deb" \ + && dpkg -i -E go-agent.deb \ + && sed -i -e 's#GO_SERVER=127.0.0.1#GO_SERVER=gocd-server#' /etc/default/go-agent + +#VOLUME ["/var/lib/go-agent", "/var/log/go-agent", "/var/go/.ssh"] + +COPY autoregister.properties /var/lib/go-agent/config/autoregister.properties + +CMD until curl -s -o /dev/null "http://${GO_SERVER}:${GO_SERVER_PORT}"; do sleep 5; done; \ + if [ -n "$AGENT_KEY" ]]; then \ + sed -i -e 's/=.*/=/g' -e "s/key=/key=$AGENT_KEY/" -e "s/resources=/resources=$AGENT_RESOURCES/" /var/lib/go-agent/config/autoregister.properties; \ + fi; \ + (/usr/share/go-agent/agent.sh &); while [ ! -f /var/log/go-agent/go-agent-bootstrapper.log ]; do sleep 1; done; exec tail -F /var/log/go-agent/* + diff --git a/gocd-agent-nodejs/autoregister.properties b/gocd-agent-nodejs/autoregister.properties new file mode 100644 index 0000000..0ad1f33 --- /dev/null +++ b/gocd-agent-nodejs/autoregister.properties @@ -0,0 +1,2 @@ +agent.auto.register.key= +agent.auto.register.resources= diff --git a/gocd-agent/Dockerfile b/gocd-agent/Dockerfile new file mode 100644 index 0000000..b7b291c --- /dev/null +++ b/gocd-agent/Dockerfile @@ -0,0 +1,57 @@ +FROM debian + +RUN apt-get clean && apt-get update \ + && apt-get install -y \ + curl \ + git \ + subversion +RUN apt-get clean && apt-get install -y python-dev +RUN curl -sL https://deb.nodesource.com/setup_5.x | bash -E - \ + && apt-get update \ + && apt-get install -y \ + build-essential \ + nodejs + +RUN apt-get clean && apt-get install -y maven +RUN apt-get clean && apt-get install -y gradle \ + && apt-get clean \ + && rm -rf /var/lib/apt/listss/* + +WORKDIR /opt +#RUN curl -sL -o - --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" -q "http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz" | tar xzf - +ADD binaries/jdk-8u66-linux-x64.tar.gz /opt/. +RUN update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_66/bin/java 120 \ + && update-alternatives --install /usr/bin/keytool keytool /opt/jdk1.8.0_66/bin/keytool 120\ + && update-alternatives --install /usr/bin/rmiregistry rmiregistry /opt/jdk1.8.0_66/bin/rmiregistry 120\ + && update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_66/bin/javac 120 \ + --slave /usr/bin/jar jar /opt/jdk1.8.0_66/bin/jar \ + --slave /usr/bin/rmic rmic /opt/jdk1.8.0_66/bin/rmic\ + && update-alternatives --set java /opt/jdk1.8.0_66/bin/java\ + && update-alternatives --set keytool /opt/jdk1.8.0_66/bin/keytool \ + && update-alternatives --set rmiregistry /opt/jdk1.8.0_66/bin/rmiregistry \ + && echo "export JAVA_HOME=/opt/jdk1.8.0_66" >> /.profile + +# Installing CloudFoundry +RUN cd /tmp \ + && curl -sL -o cf-cli-installer_6.15.0_x86-64.deb "https://cli.run.pivotal.io/stable?release=debian64&version=6.15.0&source=github-rel" \ + && dpkg -i -E cf-cli-installer_6.15.0_x86-64.deb \ + && cf add-plugin-repo bluemix-cf-staging http://plugins.ng.bluemix.net >/dev/null 2>&1 +# && pip install python-openstackclient >/dev/null 2>&1 + +# Installing Go agent +RUN cd /tmp \ + && curl -sL -o go-agent.deb "https://download.go.cd/gocd-deb/go-agent-15.2.0-2248.deb" \ + && dpkg -i -E go-agent.deb \ + && sed -i -e 's#GO_SERVER=127.0.0.1#GO_SERVER=gocd-server#' /etc/default/go-agent \ + && sed -i -e 's#JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/jre"#JAVA_HOME="/opt/jdk1.8.0_66/jre"#' /etc/default/go-agent + +#VOLUME ["/var/lib/go-agent", "/var/log/go-agent", "/var/go/.ssh"] + +COPY autoregister.properties /var/lib/go-agent/config/autoregister.properties + +CMD until curl -s -o /dev/null "http://${GO_SERVER}:${GO_SERVER_PORT}"; do sleep 5; done; \ + if [ -n "$AGENT_KEY" ]]; then \ + sed -i -e 's/=.*/=/g' -e "s/key=/key=$AGENT_KEY/" -e "s/resources=/resources=$AGENT_RESOURCES/" /var/lib/go-agent/config/autoregister.properties; \ + fi; \ + (/usr/share/go-agent/agent.sh &); while [ ! -f /var/log/go-agent/go-agent-bootstrapper.log ]; do sleep 1; done; exec tail -F /var/log/go-agent/* + diff --git a/gocd-agent/autoregister.properties b/gocd-agent/autoregister.properties new file mode 100644 index 0000000..0ad1f33 --- /dev/null +++ b/gocd-agent/autoregister.properties @@ -0,0 +1,2 @@ +agent.auto.register.key= +agent.auto.register.resources= diff --git a/gocd-server/Dockerfile b/gocd-server/Dockerfile new file mode 100644 index 0000000..2b6ee08 --- /dev/null +++ b/gocd-server/Dockerfile @@ -0,0 +1,69 @@ +FROM debian + +RUN apt-get clean && apt-get update \ + && apt-get install -y \ + curl \ + openjdk-7-jre-headless +RUN apt-get clean && apt-get install -y \ + git \ + subversion +RUN apt-get clean && apt-get install -y maven +RUN apt-get clean && apt-get install -y gradle \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +# Setting Java8 as default Java +WORKDIR /opt +#RUN curl -sL -o - --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" -q "http://download.oracle.com/otn-pub/java/jdk/8u66-b17/jdk-8u66-linux-x64.tar.gz" | tar xzf - +ADD binaries/jdk-8u66-linux-x64.tar.gz /opt/. +RUN update-alternatives --install /usr/bin/java java /opt/jdk1.8.0_66/bin/java 120 \ + && update-alternatives --install /usr/bin/keytool keytool /opt/jdk1.8.0_66/bin/keytool 120\ + && update-alternatives --install /usr/bin/rmiregistry rmiregistry /opt/jdk1.8.0_66/bin/rmiregistry 120\ + && update-alternatives --install /usr/bin/javac javac /opt/jdk1.8.0_66/bin/javac 120 \ + --slave /usr/bin/jar jar /opt/jdk1.8.0_66/bin/jar \ + --slave /usr/bin/rmic rmic /opt/jdk1.8.0_66/bin/rmic\ + && update-alternatives --set java /opt/jdk1.8.0_66/bin/java\ + && update-alternatives --set keytool /opt/jdk1.8.0_66/bin/keytool \ + && update-alternatives --set rmiregistry /opt/jdk1.8.0_66/bin/rmiregistry \ + && echo "export JAVA_HOME=/opt/jdk1.8.0_66" >> /.profile + +# Installing Go server +RUN cd /tmp \ + && curl -sL -o go-server.deb "https://download.go.cd/gocd-deb/go-server-16.1.0-2855.deb" \ + && dpkg -i go-server.deb \ + && rm -f go-server.deb \ + && sed -i -e "s/DAEMON=Y/DAEMON=N/" /etc/default/go-server \ + && sed -i -e 's#JAVA_HOME="/usr/lib/jvm/java-7-openjdk-amd64/jre"#JAVA_HOME="/opt/jdk1.8.0_66/jre"#' /etc/default/go-server + +VOLUME ["/var/lib/go-server", "/var/log/go-server", "/etc/go", "/var/go/.ssh"] + +# Building CloudFoundry plugin +RUN cd /tmp \ + && git clone -b v2.0.0 https://github.com/Sounie/springer-gocd-cloudfoundry-plugin.git \ + && cd springer-gocd-cloudfoundry-plugin \ + && ./gradlew build \ + && cp build/libs/springer-gocd-cloudfoundry-plugin*.jar /tmp/springer-gocd-cloudfoundry-plugin-2.0.1.jar \ + && rm -rf /root/.gradle + +# expose ports +EXPOSE 8153 8154 + +ENV SERVER_MEM 512m +ENV SERVER_MAX_MEM 1024m +ENV AGENT_KEY "" + +CMD if [ ! -f /var/lib/go-server/plugins/external/springer-gocd-cloudfoundry-plugin-2.0.1.jar ]]; then \ + mkdir -p /var/lib/go-server/plugins/external; \ + cp /tmp/springer-gocd-cloudfoundry-plugin-2.0.1.jar /var/lib/go-server/plugins/external/springer-gocd-cloudfoundry-plugin-2.0.1.jar; \ + fi; \ + (/bin/su - $go -c "/usr/share/go-server/server.sh &"); \ + until curl -s -o /dev/null 'http://localhost:8153'; \ + do \ + sleep 1; \ + done; \ + if [ -n "$AGENT_KEY" ]]; then \ + sed -i -e 's/agentAutoRegisterKey="[^"]*" *//' -e 's#\(