From f6a3c0e11f5ea57efcbdeafb5d1524f1e1e4f65c 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 | 9 ++++++ ci/Jenkinsfile | 64 +++++++++++++++++++++++++++++++++++++++++++ ci/build-initramfs.sh | 3 ++ ci/build-rootfs.sh | 3 ++ ci/prepare.sh | 1 + ci/publish.sh | 3 ++ 7 files changed, 113 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..ddec132 --- /dev/null +++ b/ci/Dockerfile @@ -0,0 +1,9 @@ +FROM registry.fedoraproject.org/fedora:34 + +RUN dnf install -y \ + make \ + ncurses-devel \ + perl-ExtUtils-MakeMaker \ + perl-FindBin \ + perl-Thread-Queue \ + && dnf clean all diff --git a/ci/Jenkinsfile b/ci/Jenkinsfile new file mode 100644 index 0000000..94f39b8 --- /dev/null +++ b/ci/Jenkinsfile @@ -0,0 +1,64 @@ +pipeline { + agent { + dockerfile { + dir 'ci' + args '--privileged -u 0:0' + } + } + + options { + disableConcurrentBuilds() + } + + triggers { + pollSCM '' + } + + environment { + BUILDROOT_SRC = "${env.WORKSPACE}/buildroot" + } + + stages { + stage('Prepare') { + steps { + 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