pipeline {
agent none
options {
timestamps()
}
environment {
KIWI_FILE = 'Fedora.kiwi'
IMAGE_TYPE = 'iso'
IMAGE_PROFILE = 'Workstation-Live'
IMAGE_VERSION = '45'
OUTPUT_DIR = 'outdir'
B2_ENDPOINT = 'https://s3.eu-central-003.backblazeb2.com'
AWS_DEFAULT_REGION = 'eu-central-003'
ISO_BUCKET = 'dist-sayagit-fedora-iso'
// Must match the in
// repositories/kernel-sp12in.xml.
KERNEL_SURFACE_REPO_URL = 'https://rpm.sayag.it/kernel-sp12in/fedora/45/aarch64'
// awscli2 sends CRC32 checksums by default, which B2 rejects. Ask for
// them only where the S3 API requires them.
AWS_REQUEST_CHECKSUM_CALCULATION = 'when_required'
AWS_RESPONSE_CHECKSUM_VALIDATION = 'when_required'
}
stages {
stage('Build Fedora Workstation Live ISO (ARM64)') {
agent {
kubernetes {
defaultContainer 'kiwi'
yaml """
apiVersion: v1
kind: Pod
metadata:
namespace: jenkins
spec:
nodeSelector:
kubernetes.io/arch: arm64
containers:
- name: kiwi
image: fedora:44
imagePullPolicy: Always
command: [ 'sleep' ]
args: [ 'infinity' ]
tty: true
securityContext:
privileged: true
resources:
requests:
cpu: "2"
memory: 4Gi
ephemeral-storage: 20Gi
limits:
memory: 12Gi
ephemeral-storage: 50Gi
"""
}
}
steps {
checkout scm
container('kiwi') {
script {
try {
// The kernel-surface RPM is a build input, not
// something this repository can produce: the image
// installs kernel-surface by name and s
// Fedora's kernel packages. Its pipeline publishes
// it to rpm.sayag.it, which repositories/kernel-sp12in.xml
// points at directly, so there is nothing to stage
// here. Fail now rather than several minutes into
// kiwi on an unresolvable package name.
sh '''
set -eux
dnf --assumeyes install curl
repomd="${KERNEL_SURFACE_REPO_URL}/repodata/repomd.xml"
if ! curl -fsS --retry 3 -o /dev/null "${repomd}"; then
echo "No kernel-surface repository at ${repomd}." >&2
echo "Run the kernel-surface pipeline for Fedora ${IMAGE_VERSION} first." >&2
exit 1
fi
'''
sh '''
dnf --assumeyes install git kiwi kiwi-systemdeps distribution-gpg-keys
git config --global --add safe.directory .
git submodule update --init --recursive
./kiwi-build \\
--kiwi-file="${KIWI_FILE}" \\
--image-type="${IMAGE_TYPE}" \\
--image-profile="${IMAGE_PROFILE}" \\
--output-dir "${OUTPUT_DIR}"
ls -lh "${OUTPUT_DIR}-build"
'''
} catch (Exception e) {
echo "Caught exception: ${e.getMessage()}"
currentBuild.result = 'FAILURE'
throw e
}
}
stash name: "fedora-workstation-live-iso-stash", includes: "${OUTPUT_DIR}-build/Fedora.aarch64-${IMAGE_VERSION}.iso"
}
}
}
stage('Push Fedora Workstation Live ISO (ARM64)') {
agent {
kubernetes {
defaultContainer 's5cmd'
yaml """
apiVersion: v1
kind: Pod
metadata:
namespace: jenkins
spec:
containers:
- name: s5cmd
image: peakcom/s5cmd:v2.3.0
imagePullPolicy: IfNotPresent
command: [ 'sleep' ]
args: [ 'infinity' ]
tty: true
resources:
requests:
cpu: "0.5"
memory: 4Gi
"""
}
}
steps {
container('s5cmd') {
unstash "fedora-workstation-live-iso-stash"
withCredentials([usernamePassword(
credentialsId: 'backblaze-b2-dist-iso',
usernameVariable: 'AWS_ACCESS_KEY_ID',
passwordVariable: 'AWS_SECRET_ACCESS_KEY')]) {
sh '''
set -eux
cd "${OUTPUT_DIR}-build"
src="Fedora.aarch64-${IMAGE_VERSION}.iso"
moddate=$(date -r "${src}" -u +"%Y%m%d-%H%M%S")
dst="Fedora.Surface-Pro-12in.${IMAGE_PROFILE}.${IMAGE_VERSION}.${moddate}.aarch64.iso"
mv "${src}" "${dst}"
ls -lh
/s5cmd --endpoint-url "${B2_ENDPOINT}" cp \\
--content-type "application/x-iso9660-image" \\
"${dst}" \\
"s3://${ISO_BUCKET}/fedora/${IMAGE_VERSION}/aarch64/${dst}"
'''
}
}
}
}
}
}