diff --git a/docker/spring-cloud-contract-docker/Dockerfile b/docker/spring-cloud-contract-docker/Dockerfile index 45784aedbb..109626b878 100644 --- a/docker/spring-cloud-contract-docker/Dockerfile +++ b/docker/spring-cloud-contract-docker/Dockerfile @@ -16,21 +16,29 @@ RUN useradd -u1000 -m scc COPY sdkman/ /usr/local/bin/ RUN chmod +x /usr/local/bin/sdkman-wrapper.sh +# provide output & contract directories and change owner to scc +RUN mkdir -p /contracts +RUN mkdir -p /spring-cloud-contract-output +RUN mkdir -p /spring-cloud-contract +RUN chown -R scc:scc /contracts +RUN chown -R scc:scc /spring-cloud-contract-output /spring-cloud-contract +RUN chown -R scc:scc /spring-cloud-contract + USER scc RUN curl -s https://get.sdkman.io/ | bash -COPY --chown=scc sdkman.config /home/scc/.sdkman/etc/config +COPY --chown=scc:scc sdkman.config /home/scc/.sdkman/etc/config RUN bash -c "source /home/scc/.sdkman/bin/sdkman-init.sh" RUN bash -c "sdkman-wrapper.sh install java ${SDKMAN_JAVA_INSTALLATION}" ENV JAVA_HOME /home/scc/.sdkman/candidates/java/current/ ENV PATH "${PATH}:${JAVA_HOME}/bin" # Spring Cloud Contract -COPY --chown=scc project /home/scc/spring-cloud-contract/ -WORKDIR /home/scc/spring-cloud-contract/ +COPY --chown=scc:scc project /spring-cloud-contract/ +WORKDIR /spring-cloud-contract/ # Let's copy the downloaded deps to .m2 and the gradle cache -COPY --chown=scc target/maven_dependencies /home/scc/.m2/repository/ -COPY --chown=scc target/gradle_dependencies /home/scc/.gradle/ +COPY --chown=scc:scc target/maven_dependencies /home/scc/.m2/repository/ +COPY --chown=scc:scc target/gradle_dependencies /home/scc/.gradle/ # Let's download gradle wrapper if for some reason it hasn't been downloaded RUN ./gradlew clean resolveDependencies build --stacktrace -x copyOutput || echo "Expected to fail" diff --git a/docker/spring-cloud-contract-docker/project/README.adoc b/docker/spring-cloud-contract-docker/project/README.adoc index e03da008be..1aed4cdfa0 100644 --- a/docker/spring-cloud-contract-docker/project/README.adoc +++ b/docker/spring-cloud-contract-docker/project/README.adoc @@ -2,6 +2,7 @@ ## Developer tips +### Environment variables In order to use a new environment variable inside the Gradle script, you need to add it to the `envVars` map together with a description and a default value. Otherwise, any attempt to resolve such an environment variable will lead to an exception being thrown. If you're referencing any environment variables from inside the Java code please follow the following convention. @@ -14,4 +15,10 @@ If you're referencing any environment variables from inside the Java code please String envVar; ``` -If you provide Javadocs, we will automatically parse any `@Value` annotated fields and build a table of environment variables with description and default values. \ No newline at end of file +If you provide Javadocs, we will automatically parse any `@Value` annotated fields and build a table of environment variables with description and default values. + +### Customizing the gradle build + +You can provide a customized `gradle.build` to be run in the container by mounting your customized build file as a volume when running the container: + +`docker run -v :/spring-cloud-contract/build.gradle springcloud/spring-cloud-contract:` diff --git a/docker/spring-cloud-contract-stub-runner-docker/Dockerfile b/docker/spring-cloud-contract-stub-runner-docker/Dockerfile index 2bbbefd2b8..4bab35366e 100644 --- a/docker/spring-cloud-contract-stub-runner-docker/Dockerfile +++ b/docker/spring-cloud-contract-stub-runner-docker/Dockerfile @@ -29,11 +29,11 @@ ENV PATH "${PATH}:${JAVA_HOME}/bin" # Spring Cloud Contract ENV SERVER_PORT 8750 VOLUME /tmp -COPY --chown=scc target/maven_dependencies /home/scc/.m2/repository/ -COPY --chown=scc target/libs/stub-runner-boot.jar stub-runner-boot.jar +COPY --chown=scc:scc target/maven_dependencies /home/scc/.m2/repository/ +COPY --chown=scc:scc target/libs/stub-runner-boot.jar stub-runner-boot.jar RUN echo "Fetching dependencies, please wait..." RUN java -Dthin.dryrun=true -jar stub-runner-boot.jar RUN java -Dthin.dryrun=true -jar stub-runner-boot.jar --thin.profile=rabbit RUN java -Dthin.dryrun=true -jar stub-runner-boot.jar --thin.profile=kafka -COPY --chown=scc run.sh run.sh +COPY --chown=scc:scc run.sh run.sh ENTRYPOINT ["./run.sh"] diff --git a/docs/src/main/asciidoc/docker-project.adoc b/docs/src/main/asciidoc/docker-project.adoc index e802bc2d56..6685c3ed95 100644 --- a/docs/src/main/asciidoc/docker-project.adoc +++ b/docs/src/main/asciidoc/docker-project.adoc @@ -82,6 +82,17 @@ The following environment variables are used when tests are run: include::{project-root}/docker/spring-cloud-contract-docker/target/adoc/appProps.adoc[indent=0] +### Customizing the gradle build + +You can provide a customized `gradle.build` to be run in the container by mounting your customized build file as a volume when running the container: + +==== +[source,bash] +---- +$ docker run -v :/spring-cloud-contract/build.gradle springcloud/spring-cloud-contract: +---- +==== + [[docker-example-of-usage]] === Example of Usage via HTTP @@ -458,7 +469,7 @@ $ curl -X GET http://localhost:9876/api/books IMPORTANT: If you want use the stubs that you have built locally, on your host, you should set the `-e STUBRUNNER_STUBS_MODE=LOCAL` environment variable and mount -the volume of your local m2 (`-v "${HOME}/.m2/:/root/.m2:ro"`). +the volume of your local m2 (`-v "${HOME}/.m2/:/home/scc/.m2:ro"`). [[docker-stubrunner-example-messaging]] === Example of Usage with Messaging @@ -576,9 +587,9 @@ $ docker run \ -e "STUBRUNNER_REPOSITORY_ROOT=git://https://github.com/marcingrzejszczak/cdct_python_contracts.git" \ <3> -e ADDITIONAL_OPTS="--thin.properties.dependencies.rabbitmq=org.apache.camel.springboot:camel-rabbitmq-starter:3.4.0" \ <4> -e "STUBRUNNER_STUBS_MODE=REMOTE" \ <5> - -v "${HOME}/.m2/:/root/.m2:ro" \ <6> + -v "${HOME}/.m2/:/home/scc/.m2:ro" \ <6> -p 8750:8750 \ <7> - springcloud/spring-cloud-contract-stub-runner:3.0.1-SNAPSHOT <8> + springcloud/spring-cloud-contract-stub-runner:3.0.4-SNAPSHOT <8> ``` <1> We're injecting the address of RabbitMQ via https://camel.apache.org/components/latest/rabbitmq-component.html#_spring_boot_auto_configuration[Apache Camel's Spring Boot Auto-Configuration] <2> We're telling Stub Runner which stubs to download @@ -607,4 +618,4 @@ To get the list of triggers you can send an HTTP GET request to `localhost:8750/ o.s.c.c.v.m.camel.CamelStubMessages : Will send a message to URI [rabbitmq:output?routingKey=#&queue=output] ---- -If you check the RabbitMQ management console, you'll see that there's 1 message available in the `output` queue. \ No newline at end of file +If you check the RabbitMQ management console, you'll see that there's 1 message available in the `output` queue.