4.1 KiB
Building deb packages
Using jenkins-debian-glue, we can set up a build pipeline for any
version controlled software by creating a debian
directory in the
repository. Its structure looks like:
debian
+-- changelog
+-- compat
+-- control
+-- gbp.conf
+-- postinst
+-- preinst
+-- rules
+-- source
+-- format
These files are equivalend to any standard Debian/Devuan package.
Once the repository is set up, and contains a debian
directory, we are
able to construct the deb package build pipeline. It is first
necessary to create a Jenkins -source
job, followed by a -binaries
job, and finishing with a -repos
job. Further on, for easier reading,
we will consider that we are building a package called linux-sunxi
,
which is a Linux kernel package dedicated to LIME2 Arm boards.
-source
The -source job is responsible to fetch the software (package) sources and distribute them to any build executor nodes that are needed to build the package.
These jobs need the following configuration:
-
String parameters:
release
(The codename of the suite):ascii-proposed
distribution
(The upstream Devuan suite codename):ascii
-
Git repository URL:
https://git.devuan.org/devuan-packages/linux-sunxi
-
- branch(es) to be built:
suites/ascii
- branch(es) to be built:
-
Execution shell script:
/usr/bin/generate-git-snapshot
-
Post-build triggers:
- Projects to build:
linux-sunxi-binaries
- Predefined parameters:
- Projects to build:
release=${release}
distribution=${distribution}
-binaries
The -binaries job is responsible for compiling the source code and creating deb packages out of the compiled code. The packages are compiled on each preconfigured build executor node, for each necessary CPU architecture.
These jobs need the following configuration:
-
String parameters (these are passed through by the
-source
job):release
(The codename of the suite):ascii-proposed
distribution
(The upstream Devuan suite codename):ascii
-
Configuration matrix (for the CPU architectures)
architecture
:amd64 armhf arm64
label
:amd64 armf arm64
-
- Generic combination filter:
(architecture=="amd64").implies(label=="amd64") && (architecture=="armhf").implies(label=="armhf") && (architecture=="all").implies(label=="all") && (architecture=="armel").implies(label=="armel") && (architecture=="arm64").implies(label=="arm64")
-
Copy artifacts from another project:
- Name:
linux-sunxi-source
- Artifacts to copy:
*
- Name:
-
Execution shell script:
export BUILD_ONLY=true /usr/bin/build-and-provide-package
-
Post-build triggers:
- Projects to build:
linux-sunxi-repos
- Predefined parameters:
- Projects to build:
release=${release}
distribution=${distribution}
architecture=${architecture}
label=${label}
- Archive artifacts:
*.gz,*.bz2,*.xz,*.deb,*.udeb,*.dsc,*.changes,*.buildinfo
-repos
The -repos job is responsible to take the built deb packages and ship them off to dak to create or append to an APT repository.
These jobs need the following configuration:
-
String parameters (these are passed through by the
-binaries
job):release
distribution
architecture
label
-
Copy artifacts from another project:
- Name:
linux-sunxi-binaries/architecture=$architecture,label=$label
- Artifacts to copy:
*
- Name:
-
Execution shell script:
if [ -n "$gitlabBranch" ] ; then export codename=$gitlabBranch fi . /etc/jenkins/debian_glue export KEY_ID for i in architecture* ; do #cp $i/* . cd $i debsign --no-re-sign -k$KEY_ID *.changes || true debsign --no-re-sign -k$KEY_ID *.dsc || true cd .. done #find . -type d -name 'architecture*' | xargs rm -r #debsign --no-re-sign -k$KEY_ID *.changes #debsign --no-re-sign -k$KEY_ID *.dsc ssh dak@repo.devuan.org mkdir /home/dak/jenkins/$BUILD_TAG scp -r * dak@repo.devuan.org:/home/dak/jenkins/$BUILD_TAG ssh dak@repo.devuan.org dak_add_pkgs -s $codename -c main $BUILD_TAG
Once this pipeline completes, the repository is ready to be used, but it is also possible to utilize amprolla for additional customization.