diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..64448b5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,20 @@ +sudo: required + +services: + - docker + +before_install: + - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - + - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" + - sudo apt-get update + - sudo apt-get -y install docker-ce + +script: + - docker build -t "quay.io/travelaudience/docker-nexus-proxy:${TRAVIS_TAG:-latest}" . + +after_success: + - if ([[ "${TRAVIS_BRANCH}" == "master" ]] && [[ "${TRAVIS_PULL_REQUEST}" == "false" ]]) || [[ ! -z "${TRAVIS_TAG}" ]]; + then + docker login -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}" quay.io; + docker push "quay.io/travelaudience/docker-nexus-proxy:${TRAVIS_TAG:-latest}"; + fi diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f531ff3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,37 @@ +FROM openjdk:8u131-jdk-alpine AS builder +COPY ./ /src/ +WORKDIR /src/ +RUN ./gradlew --info --no-daemon build +RUN ls -la /src/build/libs/ + +FROM quay.io/pires/docker-jre:8u131_alpine3.6.2 + +ENV ALLOWED_USER_AGENTS_ON_ROOT_REGEX "GoogleHC" +ENV AUTH_CACHE_TTL "300" +ENV BIND_PORT "8080" +ENV CLIENT_ID "REPLACE_ME" +ENV CLIENT_SECRET "REPLACE_ME" +ENV CLOUD_IAM_AUTH_ENABLED "false" +ENV KEYSTORE_PATH "keystore.jceks" +ENV KEYSTORE_PASS "safe#passw0rd!" +ENV NEXUS_DOCKER_HOST "containers.example.com" +ENV NEXUS_HTTP_HOST "nexus.example.com" +ENV NEXUS_RUT_HEADER "X-Forwarded-User" +ENV ORGANIZATION_ID "REPLACE_ME" +ENV REDIRECT_URL "https://nexus.example.com/oauth/callback" +ENV SESSION_TTL "1440000" +ENV TLS_CERT_PK12_PATH "cert.pk12" +ENV TLS_CERT_PK12_PASS "safe#passw0rd!" +ENV TLS_ENABLED "false" +ENV UPSTREAM_DOCKER_PORT "5003" +ENV UPSTREAM_HOST "localhost" +ENV UPSTREAM_HTTP_PORT "8081" + +COPY --from=builder /src/build/libs/nexus-proxy.jar /nexus-proxy.jar + +EXPOSE 8080 +EXPOSE 8443 + +CMD ["-jar", "/nexus-proxy.jar"] + +ENTRYPOINT ["java"] diff --git a/README.md b/README.md index b403829..f009b4d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,8 @@ # nexus-proxy +[![Build Status](https://travis-ci.org/travelaudience/nexus-proxy.svg?branch=master)](https://travis-ci.org/travelaudience/nexus-proxy) +[![Docker Repository on Quay](https://quay.io/repository/travelaudience/docker-nexus-proxy/status "Docker Repository on Quay")](https://quay.io/repository/travelaudience/docker-nexus-proxy) + A proxy for Nexus Repository Manager that allows for optional authentication against external identity providers. ## Introduction diff --git a/src/test/java/com/travelaudience/nexus/proxy/CloudIamAuthNexusProxyVerticleTests.java b/src/test/java/com/travelaudience/nexus/proxy/CloudIamAuthNexusProxyVerticleTests.java index 81de0ab..2417be1 100644 --- a/src/test/java/com/travelaudience/nexus/proxy/CloudIamAuthNexusProxyVerticleTests.java +++ b/src/test/java/com/travelaudience/nexus/proxy/CloudIamAuthNexusProxyVerticleTests.java @@ -1,8 +1,5 @@ package com.travelaudience.nexus.proxy; -import static java.util.stream.Collectors.toMap; -import static org.junit.Assert.assertEquals; - import io.vertx.core.Vertx; import io.vertx.core.http.HttpHeaders; import io.vertx.ext.unit.Async; @@ -20,16 +17,16 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.ServerSocket; -import java.net.URL; -import java.net.URLDecoder; +import java.net.*; import java.util.AbstractMap; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; +import static java.util.stream.Collectors.toMap; +import static org.junit.Assert.assertEquals; + @RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(VertxUnitRunner.class) @PrepareForTest(CloudIamAuthNexusProxyVerticle.class) @@ -152,7 +149,7 @@ private static final URL buildUrl(final String url) { } private static final int findRandomUnusedPort() { - try (final ServerSocket socket = new ServerSocket(0)) { + try (final ServerSocket socket = new ServerSocket(0, 50, InetAddress.getLocalHost())) { return socket.getLocalPort(); } catch (final IOException ex) { throw new UncheckedIOException(ex); diff --git a/src/test/java/com/travelaudience/nexus/proxy/UnauthenticatedNexusProxyVerticleTests.java b/src/test/java/com/travelaudience/nexus/proxy/UnauthenticatedNexusProxyVerticleTests.java index 6daca57..a2adbd8 100644 --- a/src/test/java/com/travelaudience/nexus/proxy/UnauthenticatedNexusProxyVerticleTests.java +++ b/src/test/java/com/travelaudience/nexus/proxy/UnauthenticatedNexusProxyVerticleTests.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.io.UncheckedIOException; +import java.net.InetAddress; import java.net.ServerSocket; import java.util.HashMap; import java.util.Map; @@ -75,7 +76,7 @@ public void root_responds_with_200_to_allowed_user_agents(final TestContext ctx) } private static final int findRandomUnusedPort() { - try (final ServerSocket socket = new ServerSocket(0)) { + try (final ServerSocket socket = new ServerSocket(0, 50, InetAddress.getLocalHost())) { return socket.getLocalPort(); } catch (final IOException ex) { throw new UncheckedIOException(ex);