chore: use dockerfile as jenkins agent
This commit is contained in:
2 files changed
+39
-41
No files matched your search
+31
@@ -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
@@ -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
|
||||
"""
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user