Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
feat: build script improvements.
Browse files Browse the repository at this point in the history
  • Loading branch information
iocanel committed Oct 30, 2017
1 parent b794c64 commit 56336a0
Show file tree
Hide file tree
Showing 8 changed files with 160 additions and 63 deletions.
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@
url = https://github.com/syndesisio/syndesis-system-tests.git
[submodule "images/nsswrapper-glibc"]
path = images/nsswrapper-glibc
url = git@github.com:syndesisio/nsswrapper-glibc.git
url = https://github.com/syndesisio/nsswrapper-glibc.git
196 changes: 139 additions & 57 deletions bin/build.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
#!/bin/bash

# Exit if any error occurs
set -e
Expand All @@ -19,11 +19,11 @@ function displayHelp() {
#
# Aliases
pushd () {
command pushd "$@" > /dev/null
command pushd "$@" > /dev/null
}

popd () {
command popd "$@" > /dev/null
command popd "$@" > /dev/null
}

#
Expand Down Expand Up @@ -73,122 +73,204 @@ function copyplugin() {
fi
}

#
# Maven build
function mvnbuild() {
echo "Getting project version from: $(pwd)"
version=$(pomversion)
echo "Current project version: $version"
newversion=${version/SNAPSHOT/"syndesis-$VERSION"}
echo "Changing project version: $newversion"
mvn versions:set -DnewVersion=$newversion
echo "Performing maven build: mvn clean install $MAVEN_OPTS"
mvn clean install $MAVEN_OPTS
echo "Changing project version: $version"
mvn versions:set -DnewVersion=$version
}

fromimagename() {
cat $1 | grep FROM | awk -F "[: ]" '{print $2}'
}

#
# Perform a dockerbuild via build config.
function dockerbuild() {
DOCKERFILE=$1
IMAGESTREAM=$2
BUILDER_IMAGESTREAM=$3
BUILDER_TAG=${4:-"latest"}
BC_OPTS=""
if [ -n "$BUILDER_IMAGESTREAM" ];then
echo "Using image stream: $BUILDER_IMAGESTREAM"
BC_OPTS=" --image-stream=$BUILDER_IMAGESTREAM:${BUILDER_TAG}"
fi

if [ -n "$BUILDER_TAG" ]; then
echo "Using image stream tag: $BUILDER_TAG"
cp $DOCKERFILE ${DOCKERFILE}.original
from=$(fromimagename $DOCKERFILE)
echo "Replace image FROM: $from with $from:$BUILDER_TAG"
sed -E "s|FROM ([a-zA-Z0-9\.\/:]+)|FROM ${from}:${BUILDER_TAG}|g" $DOCKERFILE > ${DOCKERFILE}.${BUILDER_TAG}
cp ${DOCKERFILE}.${BUILDER_TAG} $DOCKERFILE
fi

NAME="$ARTIFACT_PREFIX$IMAGESTREAM"
BUILD_CONFIG=`oc get bc $OC_OPTS | grep $NAME || echo ""`
if [ -n "$BUILD_CONFIG" ]; then
# Build config contains a copy of the dockerfile, so we need to always recreate it.
echo "Removing Build Conifg: $NAME"
oc delete bc $NAME $OC_OPTS
fi
echo "Creating Build Conifg: $NAME"
cat $DOCKERFILE | oc new-build --name=$NAME --dockerfile=- --to=syndesis/$NAME:$VERSION --strategy=docker $BC_OPTS $OC_OPTS || true

# Verify that the build config has been created.
BUILD_CONFIG=`oc get bc $OC_OPTS | grep $NAME || echo ""`
if [ -z "$BUILD_CONFIG" ]; then
echo "Creating Build Conifg: $NAME"
cat $DOCKERFILE | oc new-build --name=$NAME --dockerfile=- --to=syndesis/$NAME:$VERSION --strategy=docker $OC_OPTS || true

# Verify that the build config has been created.
BUILD_CONFIG=`oc get bc $OC_OPTS | grep $NAME || echo ""`
if [ -z "$BUILD_CONFIG" ]; then
echo "Failed to create Build Config: $NAME"
exit 1
fi
echo "Failed to create Build Config: $NAME"
exit 1
fi

if [ -f /tmp/archive.tar.gz ]; then
rm /tmp/archive.tar.gz
fi

tar -cvf archive.tar .
oc start-build $NAME $OC_OPTS --from-archive=archive.tar --follow
tar -czvf /tmp/archive.tar.gz . --exclude='.git'
oc start-build $NAME --from-archive=/tmp/archive.tar.gz $OC_OPTS --follow
rm /tmp/archive.tar.gz
}

#
# Finds the docker image reference of an image stream tag
function istag2docker() {
ISTAG=$1
oc get istag $OC_OPTS | grep $ISTAG | awk -F " " '{print $2}'
}

#
# Prints the version of the pom
function pomversion() {
# The version is 8 lines from the end.
# We ditch the rest, cause we can't filter them out (don't have a common pattern).
# The last 7 lines all start with '['.
mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v "\[" | tail -n 1
}

function modules_to_build() {
modules="plugins agentimages images tools"
if [ "x${RF}" != x ]; then
modules=$(echo $modules | sed -e "s/^.*$RF/$RF/")
fi
echo $modules
}

#
# Build Modules / Components
#

function plugins() {
pushd plugins
#Kubernetes Plugin
pushd kubernetes-plugin
git pull --rebase origin master || true
mvnbuild
popd

#Kubernetes Pipeline Plugin
pushd kubernetes-pipeline-plugin
git pull --rebase origin master || true
mvnbuild
popd

#Durable Task Pluginresource(s) were provided, but no name, label selector, or --all flag specified
pushd durable-task-plugin
git pull --rebase origin master || true
mvnbuild
popd

#Groovy Pipeline Libraries
pushd workflow-cps-global-lib-plugin
git pull --rebase origin master || true
mvnbuild
popd

popd
}

function images() {
pushd images
pushd images

# Openshift Jenkins
pushd openshift-jenkins/2
dockerbuild Dockerfile openshift-jenkins
git pull --rebase origin master || true

# Import requirements
oc import-image origin:v3.6.0 --from=docker.io/openshift/origin:v3.6.0 --confirm || true
dockerbuild Dockerfile openshift-jenkins origin v3.6.0
popd

# Syndesis Jenkins
pushd syndesis-jenkins
git pull --rebase origin master || true
# Let's copy the plugins
copyplugin kubernetes
copyplugin durable-task-plugin
copyplugin workflow-cps-global-lib
# This is a multimodule project so it does get a little bit more complicated
copyplugin kubernetes-pipeline-arquillian-steps ../../plugins/kubernetes-pipeline-plugin/arquillian-steps/target/
OPENSHIFT_JENKINS_DOCKER_IMAGE=$(istag2docker "${ARTIFACT_PREFIX}openshift-jenkins")
oc new-build --name ${ARTIFACT_PREFIX}syndesis-jenkins --binary=true --docker-image=$OPENSHIFT_JENKINS_DOCKER_IMAGE --to=syndesis/${ARTIFACT_PREFIX}syndesis-jenkins:latest --strategy=source $OC_OPTS || true
tar -cvf archive.tar bin configuration plugins plugins.txt
oc start-build ${ARTIFACT_PREFIX}syndesis-jenkins $OC_OPTS --from-archive=archive.tar --follow

# We could possibly remove this?
#OPENSHIFT_JENKINS_DOCKER_IMAGE=$(istag2docker "${ARTIFACT_PREFIX}openshift-jenkins")
oc new-build --name ${ARTIFACT_PREFIX}syndesis-jenkins --binary=true --image-stream=${ARTIFACT_PREFIX}openshift-jenkins:$VERSION --to=syndesis/${ARTIFACT_PREFIX}syndesis-jenkins:${VERSION} --strategy=source $OC_OPTS || true
tar -czvf /tmp/archive.tar.gz bin configuration plugins plugins.txt
oc start-build ${ARTIFACT_PREFIX}syndesis-jenkins $OC_OPTS --from-archive=/tmp/archive.tar.gz --follow
rm /tmp/archive.tar.gz
popd

popd
}

function agentimages() {
pushd images/openshift-jenkins
pushd images/openshift-jenkins

#
# Jenkins Agents
pushd slave-base
dockerbuild Dockerfile jenkins-slave-base-centos7
oc import-image origin:v3.6.0 --from=docker.io/openshift/origin:v3.6.0 --confirm || true
dockerbuild Dockerfile jenkins-slave-base-centos7 origin v3.6.0
popd

pushd slave-nodejs
dockerbuild Dockerfile jenkins-slave-nodejs-centos7
dockerbuild Dockerfile jenkins-slave-nodejs-centos7 jenkins-slave-base-centos7 $VERSION
popd

pushd slave-maven
dockerbuild Dockerfile jenkins-slave-maven-centos7
dockerbuild Dockerfile jenkins-slave-maven-centos7 jenkins-slave-base-centos7 $VERSION
popd

popd
}

function plugins() {
pushd plugins
#Kubernetes Plugin
pushd kubernetes-plugin
mvn clean install $MAVEN_OPTS
popd

#Kubernetes Pipeline Plugin
pushd kubernetes-pipeline-plugin
mvn clean install $MAVEN_OPTS
popd

#Durable Task Plugin
pushd durable-task-plugin
mvn clean install $MAVEN_OPTS
popd

#Groovy Pipeline Libraries
pushd workflow-cps-global-lib-plugin
mvn clean install $MAVEN_OPTS
popd

popd
}

function tools() {
pushd images/nsswrapper-glibc
dockerbuild Dockerfile nsswrapper-glibc
oc import-image centos:centos7 --from=docker.io/library/centos:centos7 --confirm || true
dockerbuild Dockerfile nsswrapper-glibc centos centos7
popd
}

function modules_to_build() {
modules="plugins agentimages images tools"
if [ "x${RF}" != x ]; then
modules=$(echo $modules | sed -e "s/^.*$RF/$RF/")
fi
echo $modules
pushd images/maven-with-repo
oc import-image maven:3.5.0 --from=docker.io/library/maven:3.5.0 --confirm || true
dockerbuild Dockerfile maven-with-repo maven 3.5.0
popd
}


#
# Options and flags
SKIP_TESTS=$(hasflag --skip-tests "$@" 2> /dev/null)
CLEAN=$(hasflag --clean "$@" 2> /dev/null)
ARTIFACT_PREFIX=$(readopt --artifact-prefix "$@" 2> /dev/null)
NAMESPACE=$(readopt --namespace "$@" 2> /dev/null)
NAMESPACE=$(or $(readopt --namespace "$@" 2> /dev/null) $(oc project -q))
VERSION=$(or $(readopt --version "$@" 2> /dev/null) "latest")
RESUME_FROM=$(readopt --resume-from "$@" 2> /dev/null)
HELP=$(hasflag --help "$@" 2> /dev/null)
Expand Down
15 changes: 15 additions & 0 deletions images/maven-with-repo/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM maven:3.5.0

ENV MAVEN_OPTS=-Dmaven.repo.local=/usr/local/share/maven/repository

RUN mkdir -p /usr/local/share/maven/repository

RUN mkdir -p /usr/local/src && \
cd /usr/local/src && \
git clone https://github.com/syndesisio/syndesis.git && \
cd syndesis && \
git submodule init && git submodule update

RUN cd /usr/local/src/syndesis/rest && mvn clean install -DskipTests

RUN rm -rf /usr/loca/src/syndesis
2 changes: 1 addition & 1 deletion images/openshift-jenkins
2 changes: 1 addition & 1 deletion plugins/kubernetes-pipeline-plugin
Submodule kubernetes-pipeline-plugin updated 38 files
+53 −5 aggregator/pom.xml
+165 −0 arquillian-steps/pom.xml
+117 −0 arquillian-steps/readme.md
+124 −0 ...eps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/AbstractSessionManagerStep.java
+211 −0 ...ain/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/AbstractSessionManagerStepExecution.java
+43 −0 arquillian-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/AbstractStep.java
+104 −0 ...an-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/AbstractStepExecution.java
+77 −0 ...an-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/CreateEnvironmentStep.java
+54 −0 ...src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/CreateEnvironmentStepExecution.java
+79 −0 arquillian-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/CubeDSL.java
+22 −0 ...-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/EmptyDependencyResolver.java
+74 −0 arquillian-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/GetNamespaceStep.java
+56 −0 ...teps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/GetNamespaceStepExecution.java
+114 −0 arquillian-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/InNamespaceStep.java
+105 −0 ...steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/InNamespaceStepExecution.java
+76 −0 arquillian-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/InSessionStep.java
+53 −0 ...n-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/InSessionStepExecution.java
+37 −0 ...an-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/MapAnnotationProvider.java
+37 −0 arquillian-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/MapLabelProvider.java
+30 −0 ...s/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/NamespaceDestructionCallback.java
+27 −0 ...illian-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/NamespaceExpander.java
+21 −0 ...eps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/SessionManagerStopCallback.java
+51 −0 arquillian-steps/src/main/java/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/StreamLogger.java
+5 −0 arquillian-steps/src/main/resources/index.jelly
+255 −0 arquillian-steps/src/main/resources/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/Cube.groovy
+48 −0 ...steps/src/main/resources/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/SessionStep/config.jelly
+1 −0 ...eps/src/main/resources/io/fabric8/kubernetes/pipeline/arquillian/cube/kubernetes/SessionStep/help-name.html
+17 −1 core/pom.xml
+101 −0 core/src/test/java/io/fabric8/kubernetes/pipeline/KubernetesTestUtil.java
+92 −0 core/src/test/java/org/jvnet/hudson/test/JenkinsRuleNonLocalhost.java
+11 −1 devops-steps/pom.xml
+19 −2 kubernetes-steps/pom.xml
+3 −2 kubernetes-steps/src/main/resources/io/fabric8/kubernetes/pipeline/Kubernetes.groovy
+118 −0 kubernetes-steps/src/test/java/io/fabric8/kubernetes/pipeline/KubernetesPipelineTest.java
+12 −0 kubernetes-steps/src/test/resources/arquillian.xml
+3 −0 kubernetes-steps/src/test/resources/io/fabric8/kubernetes/pipeline/simpleMaven.groovy
+92 −18 pom.xml
+4 −0 readme.md
2 changes: 1 addition & 1 deletion plugins/workflow-cps-global-lib-plugin
Submodule workflow-cps-global-lib-plugin updated 19 files
+4 −3 pom.xml
+1 −2 src/main/java/org/jenkinsci/plugins/workflow/libs/ClasspathAdder.java
+6 −9 src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryAdder.java
+3 −23 src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryConfiguration.java
+2 −13 src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryDecorator.java
+2 −4 src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryRecord.java
+0 −12 src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryRetriever.java
+9 −23 src/main/java/org/jenkinsci/plugins/workflow/libs/LibraryStep.java
+2 −5 src/main/java/org/jenkinsci/plugins/workflow/libs/SCMRetriever.java
+4 −8 src/main/java/org/jenkinsci/plugins/workflow/libs/SCMSourceRetriever.java
+74 −0 src/main/java/org/jenkinsci/plugins/workflow/libs/WorkspaceRetriever.java
+0 −3 src/main/resources/org/jenkinsci/plugins/workflow/libs/LibraryConfiguration/config.jelly
+0 −4 src/main/resources/org/jenkinsci/plugins/workflow/libs/LibraryConfiguration/help-includeInChangesets.html
+0 −3 src/main/resources/org/jenkinsci/plugins/workflow/libs/LibraryStep/config.jelly
+0 −5 src/main/resources/org/jenkinsci/plugins/workflow/libs/LibraryStep/help-changelog.html
+0 −62 src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryAdderTest.java
+2 −3 src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryDecoratorTest.java
+4 −6 src/test/java/org/jenkinsci/plugins/workflow/libs/LibraryStepTest.java
+0 −60 src/test/java/org/jenkinsci/plugins/workflow/libs/SCMSourceRetrieverTest.java

0 comments on commit 56336a0

Please sign in to comment.