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 {
|
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
|
||||||
|
"""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user