From cf05d79eab572c8472d017e851efaef5816a1a09 Mon Sep 17 00:00:00 2001 From: Russell Mull Date: Tue, 24 Jul 2018 18:30:00 -0400 Subject: [PATCH 1/2] Build in docker --- Dockerfile | 50 +++++++++++++++++++++++++ Jenkinsfile | 105 +++++++++++++++++++++++++++------------------------- 2 files changed, 104 insertions(+), 51 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..237cf81f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,50 @@ +FROM ubuntu:16.04 + +WORKDIR /app + +# common packages +RUN apt-get update && \ + apt-get install -y \ + ca-certificates curl file tar clang libclang-dev \ + build-essential cmake libssl-dev zlib1g-dev \ + ruby-dev libboost-dev git wget && \ + rm -rf /var/lib/apt/lists/* + +# install cucumber package +RUN gem install cucumber -v 2.0.0 --no-rdoc --no-ri + +# install rust toolchain +env RUSTUP_HOME=/usr/local/rustup \ + CARGO_HOME=/usr/local/cargo + +RUN curl https://sh.rustup.rs -sSf | \ + sh -s -- --default-toolchain 1.20.0 -y + +env PATH=/usr/local/cargo/bin:${PATH} + +# install arduino toolchain +RUN wget -nv http://arduino.cc/download.php?f=/arduino-1.8.5-linux64.tar.xz -O arduino-1.8.5.tar.xz + +RUN tar -xf arduino-1.8.5.tar.xz && \ + cd arduino-1.8.5 && \ + mkdir -p /usr/share/arduino && \ + cp -R * /usr/share/arduino + + +# Fetch and build cargo deps +RUN mkdir src && echo "fn main() { }" >> build.rs && touch src/tests.rs + +COPY ./firmware/brake/kia_soul_ev_niro/tests/property/Cargo.toml . +RUN cargo build + +COPY ./firmware/brake/kia_soul_petrol/tests/property/Cargo.toml . +RUN cargo build + +COPY ./firmware/common/libs/pid/tests/property/Cargo.toml . +RUN cargo build + +COPY ./firmware/steering/tests/property/Cargo.toml . +RUN cargo build + +COPY ./firmware/throttle/tests/property/Cargo.toml . +RUN cargo build diff --git a/Jenkinsfile b/Jenkinsfile index 5b6866dc..3fe6c198 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,60 +1,63 @@ #!groovy -def cleanCheckout() { - checkout([ - $class: 'GitSCM', - branches: scm.branches, - extensions: scm.extensions + [[$class: 'CleanBeforeCheckout']], - userRemoteConfigs: scm.userRemoteConfigs - ]) -} +node { + checkout scm + + def image = docker.build("cmake-build:${env.BUILD_ID}") + + def builds = [:] + def output = image.inside { + sh returnStdout: true, script: "cmake -LA ./firmware | grep 'VEHICLE_VALUES' | cut -d'=' -f 2" + } + + def platforms = output.trim().tokenize(';') + + for(int j=0; j Date: Wed, 1 Aug 2018 10:04:57 -0700 Subject: [PATCH 2/2] Add docker.build call Prior to this commit the parallel builds did not have a docker.build command causing multiple workers to be missing a docker container to work in. This commit fixes that by adding the build command to ensure that each worker node has a container to use. --- Jenkinsfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index 3fe6c198..f06d9479 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,6 +19,8 @@ node { node { checkout scm + image = docker.build("cmake-build:${env.BUILD_ID}") + stage("Build ${platform}") { image.inside { sh "cd firmware && \