From 63b49dd34747655a5b51c4d9652961bd831b430b Mon Sep 17 00:00:00 2001 From: Nils Andreas Svee Date: Fri, 9 May 2025 01:11:35 +0700 Subject: [PATCH] chore: use dockerfile as jenkins agent --- Dockerfile | 31 +++++++++++++++++++++++++++++++ Jenkinsfile | 49 ++++++++----------------------------------------- 2 files changed, 39 insertions(+), 41 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c9181d5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +FROM lochnair/alpine-sdk:latest + +USER root +# Install required dependencies +RUN apk add --no-cache \ + bash \ + curl \ + gcc \ + musl-dev \ + libgcc \ + openssl-dev \ + pkgconfig \ + make \ + git \ + rustup + +RUN GCC_TARGETS="aarch64-linux-musl arm-linux-musleabi armv7m-linux-musleabi armv7l-linux-musleabihf mips-linux-muslsf mips64-linux-musl mips64el-linux-musl mipsel-linux-muslsf x86_64-linux-musl" && \ + for GCC_TARGET in $GCC_TARGETS; do \ + TOOLCHAIN_URL="https://musl.cc/${GCC_TARGET}-cross.tgz"; \ + wget -O- ${TOOLCHAIN_URL} | tar -xz -C /opt; \ + done + +USER sdk + +# Install Rust and set up rustup +RUN rustup-init -y && \ + source $HOME/.cargo/env && \ + rustup update nightly && \ + rustup default nightly && \ + rustup component add rust-src --toolchain nightly + diff --git a/Jenkinsfile b/Jenkinsfile index 22cfe97..384c143 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -24,7 +24,7 @@ def getLinkerEnv(target) { } pipeline { - agent any + agent { dockerfile true } stages { stage('Main') { @@ -41,53 +41,20 @@ pipeline { TARGET_ARCH = getArch(GCC_TARGET) CC = "${GCC_TARGET}-gcc" LINKER_ENV_KEY = getLinkerEnv(TARGET) - PATH = "${WORKSPACE}/${GCC_TARGET}-cross/bin:${env.HOME}/.cargo/bin:${env.PATH}" + PATH = "/opt/${GCC_TARGET}-cross/bin:/home/sdk/.cargo/bin:${env.PATH}" RUSTFLAGS = "-C target-feature=+crt-static" - TOOLCHAIN_URL = "https://musl.cc/${GCC_TARGET}-cross.tgz" } stages { - stage('Install Rust target') { - when { - expression { - def res = sh(script: "rustup target list --installed", returnStdout: true) - - if (res.contains(TARGET)) { - return false - } else { - return true - } - } - } - - steps { - sh "rustup target add ${TARGET}" - } - } - stage('Download GCC toolchain') { - when { - expression { - def res = sh(script: "${CC} -v", returnStatus: true) - - if (res > 0) { - return true - } else { - return false - } - } - } - steps { - sh "wget -q ${TOOLCHAIN_URL}" - sh 'mkdir ' + GCC_TARGET + '-cross' - sh 'tar -x -z -f ' + GCC_TARGET + '-cross.tgz' - sh 'rm -vf ${GCC_TARGET}-cross.tgz' - } - } - stage('Build') { steps { withEnv(["${LINKER_ENV_KEY}=${CC}", "RUSTFLAGS=-C target-feature=+crt-static"]) { - sh "cargo build --release --target ${TARGET}" + sh """ + cargo +nightly build \ + -Z build-std=std,panic_abort \ + -Z build-std-features="optimize_for_size" \ + --target ${TARGET} --release + """ } } }