From 7a230d53268b106dce2cadb1f1cbbcdb85242fa2 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Tue, 15 Mar 2022 15:42:46 -0500 Subject: [PATCH] ci: Begin CI pipeline --- Makefile | 30 +++++++++++++++++ ci/Dockerfile | 19 +++++++++++ ci/Jenkinsfile | 75 +++++++++++++++++++++++++++++++++++++++++++ ci/build-initramfs.sh | 3 ++ ci/build-rootfs.sh | 3 ++ ci/prepare.sh | 1 + ci/publish.sh | 3 ++ 7 files changed, 134 insertions(+) create mode 100644 Makefile create mode 100644 ci/Dockerfile create mode 100644 ci/Jenkinsfile create mode 100644 ci/build-initramfs.sh create mode 100644 ci/build-rootfs.sh create mode 100644 ci/prepare.sh create mode 100644 ci/publish.sh diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..179a115 --- /dev/null +++ b/Makefile @@ -0,0 +1,30 @@ +BUILDROOT_SRC ?= ~/src/buildroot + +.PHONY: all +all: initramfs rootfs + +.PHONY: rootfs +rootfs: _build/rootfs/.config + $(MAKE) -C _build/rootfs -j $(shell nproc) + +.PHONY: initramfs +initramfs: _build/initramfs/.config + $(MAKE) -C _build/initramfs -j $(shell nproc) + +.PHONY: publish +publish: + rsync -rtliO \ + _build/rootfs/images/rpi-firmware/ \ + _build/rootfs/images/Image \ + _build/rootfs/images/*.dtb \ + _build/initramfs/images/rootfs.cpio.lz4 \ + pxe0.pyrocufflink.blue:/var/lib/tftpboot/jenkinsagent-aarch64/ + rsync -P --no-W \ + _build/rootfs/images/rootfs.squashfs \ + pxe0.pyrocufflink.blue:/var/lib/nbd/jenkinsagent-aarch64.squashfs + +_build/rootfs/.config: + $(MAKE) -C $(BUILDROOT_SRC) O=${PWD}/_build/rootfs BR2_EXTERNAL=${PWD} jenkinsagent_defconfig + +_build/initramfs/.config: + $(MAKE) -C $(BUILDROOT_SRC) O=${PWD}/_build/initramfs BR2_EXTERNAL=${PWD} jenkinsagent_initramfs_defconfig diff --git a/ci/Dockerfile b/ci/Dockerfile new file mode 100644 index 0000000..e4e1144 --- /dev/null +++ b/ci/Dockerfile @@ -0,0 +1,19 @@ +FROM registry.fedoraproject.org/fedora:30 + +RUN dnf install -y \ + bc \ + bzip2 \ + cpio \ + diffutils \ + g++ \ + gcc \ + make \ + ncurses-devel \ + openssh-clients \ + patch \ + perl-ExtUtils-MakeMaker \ + perl-Thread-Queue \ + rsync \ + wget \ + which \ + && dnf clean all diff --git a/ci/Jenkinsfile b/ci/Jenkinsfile new file mode 100644 index 0000000..0fc275d --- /dev/null +++ b/ci/Jenkinsfile @@ -0,0 +1,75 @@ +pipeline { + agent { + dockerfile { + dir 'ci' + args '-v /etc/ssh/ssh_known_hosts:/etc/ssh/ssh_known_hosts' + } + } + + options { + disableConcurrentBuilds() + } + + triggers { + pollSCM '' + } + + parameters { + booleanParam \ + name: 'Clean', + description: 'Clean the workspace and perform a full rebuild' + } + + environment { + BUILDROOT_SRC = "${env.WORKSPACE}/buildroot" + } + + stages { + stage('Prepare') { + steps { + script { + if (params.Clean) { + sh 'rm -rf _build' + } + } + checkout poll: false, scm: [ + $class: 'GitSCM', + branches: [[name: '2022.02.x']], + doGenerateSubmoduleConfigurations: false, + userRemoteConfigs: [[url: 'git://git.buildroot.net/buildroot']], + extensions: [ + [ + $class: 'RelativeTargetDirectory', + relativeTargetDir: 'buildroot', + ], + ], + ] + sh '. ci/prepare.sh' + } + } + + stage('Build') { + parallel { + stage('Build Initramfs') { + steps { + sh '. ci/build-initramfs.sh' + } + } + + stage('Build Rootfs') { + steps { + sh '. ci/build-rootfs.sh' + } + } + } + } + + stage('Publish') { + steps { + sshagent(['jenkins-pxe']) { + sh '. ci/publish.sh' + } + } + } + } +} diff --git a/ci/build-initramfs.sh b/ci/build-initramfs.sh new file mode 100644 index 0000000..ab33f07 --- /dev/null +++ b/ci/build-initramfs.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +make initramfs diff --git a/ci/build-rootfs.sh b/ci/build-rootfs.sh new file mode 100644 index 0000000..b05793f --- /dev/null +++ b/ci/build-rootfs.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +make rootfs diff --git a/ci/prepare.sh b/ci/prepare.sh new file mode 100644 index 0000000..1a24852 --- /dev/null +++ b/ci/prepare.sh @@ -0,0 +1 @@ +#!/bin/sh diff --git a/ci/publish.sh b/ci/publish.sh new file mode 100644 index 0000000..4294369 --- /dev/null +++ b/ci/publish.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +make publish