chore: use dockerfile as jenkins agent

This commit is contained in:
Nils Andreas Svee committed 2025-05-09 01:11:35 +07:00
1 parent 39a6ace0a9
commit 63b49dd347
2 files changed
+39 -41

No files matched your search

+31
View File
@@ -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
Vendored
+8 -41
View File
@@ -24,7 +24,7 @@ def getLinkerEnv(target) {
} }
pipeline { pipeline {
agent any agent { dockerfile true }
stages { stages {
stage('Main') { stage('Main') {
@@ -41,53 +41,20 @@ pipeline {
TARGET_ARCH = getArch(GCC_TARGET) TARGET_ARCH = getArch(GCC_TARGET)
CC = "${GCC_TARGET}-gcc" CC = "${GCC_TARGET}-gcc"
LINKER_ENV_KEY = getLinkerEnv(TARGET) 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" RUSTFLAGS = "-C target-feature=+crt-static"
TOOLCHAIN_URL = "https://musl.cc/${GCC_TARGET}-cross.tgz"
} }
stages { 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') { stage('Build') {
steps { steps {
withEnv(["${LINKER_ENV_KEY}=${CC}", "RUSTFLAGS=-C target-feature=+crt-static"]) { 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
"""
} }
} }
} }