diff options
author | Runar Borge <runar@borge.nu> | 2020-01-01 10:59:40 +0100 |
---|---|---|
committer | Runar Borge <runar@borge.nu> | 2020-01-03 22:18:42 +0100 |
commit | 01ae02e0bcdcf15e25bc7c2ef6a9c6c8360485d1 (patch) | |
tree | 06d07c4178bafae9f305d60d7420a68a52428fe4 | |
parent | de4805055f2cec53af0e80e9d742bc13d9e2bc4d (diff) | |
download | vyos-build-01ae02e0bcdcf15e25bc7c2ef6a9c6c8360485d1.tar.gz vyos-build-01ae02e0bcdcf15e25bc7c2ef6a9c6c8360485d1.zip |
Jenkins: T1927: Update Jenkinsfile to build on arm
-rw-r--r-- | Jenkinsfile | 81 | ||||
-rw-r--r-- | docker/arm64/Dockerfile | 314 | ||||
-rw-r--r-- | docker/armhf/Dockerfile | 314 |
3 files changed, 69 insertions, 640 deletions
diff --git a/Jenkinsfile b/Jenkinsfile index 40729a58..326c03e8 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -72,19 +72,76 @@ setDescription() // Due to long build times on DockerHub we rather build the container by ourself // and publish it later on. + +// create container names on demand +env.DOCKER_IMAGE = "vyos/vyos-build:" + getGitBranchName() +env.DOCKER_IMAGE_ARM = "vyos/vyos-build:" + getGitBranchName() + "-armhf" +env.DOCKER_IMAGE_ARM64 = "vyos/vyos-build:" + getGitBranchName() + "-arm64" + node('Docker') { - stage('Build Container') { - script { - git branch: getGitBranchName(), - url: getGitRepoURL() - - // create container name on demand - env.DOCKER_IMAGE = "vyos/vyos-build:" + getGitBranchName() - sh "docker build -t ${env.DOCKER_IMAGE} docker" - withDockerRegistry([credentialsId: "DockerHub"]) { - sh "docker push ${env.DOCKER_IMAGE}" + stage('Fetch') { + git branch: getGitBranchName(), + url: getGitRepoURL() + } + stage('Build Docker container') { + parallel ( + 'x86-64': { + script { + dir('docker') { + sh """ + mkdir -p x86-64 + cp Dockerfile x86-64/Dockerfile + cp entrypoint.sh x86-64/entrypoint.sh + + docker build -t ${env.DOCKER_IMAGE} x86-64 + """ + if ( ! isCustomBuild()) { + withDockerRegistry([credentialsId: "DockerHub"]) { + sh "docker push ${env.DOCKER_IMAGE}" + } + + } + } + } + }, + 'armhf': { + script { + dir('docker') { + sh """ + cp Dockerfile armhf/Dockerfile + cp entrypoint.sh armhf/entrypoint.sh + sed -i 's#^FROM.*#FROM multiarch/debian-debootstrap:armhf-buster-slim#' armhf/Dockerfile + docker build -t ${env.DOCKER_IMAGE_ARM} armhf + """ + if ( ! isCustomBuild()) { + withDockerRegistry([credentialsId: "DockerHub"]) { + sh "docker push ${env.DOCKER_IMAGE_ARM}" + } + } + } + } + }, + 'arm64': { + script { + dir('docker') { + sh """ + cp Dockerfile arm64/Dockerfile + cp entrypoint.sh arm64/entrypoint.sh + sed -i 's#^FROM.*#FROM multiarch/debian-debootstrap:arm64-buster-slim#' arm64/Dockerfile + docker build -t ${env.DOCKER_IMAGE_ARM64} arm64 + + """ + + if ( ! isCustomBuild()) { + withDockerRegistry([credentialsId: "DockerHub"]) { + sh "docker push ${env.DOCKER_IMAGE_ARM64}" + + } + } + } + } } - } + ) } } @@ -92,7 +149,7 @@ pipeline { options { skipDefaultCheckout() disableConcurrentBuilds() - timeout(time: 90, unit: 'MINUTES') + timeout(time: 120, unit: 'MINUTES') parallelsAlwaysFailFast() timestamps() } diff --git a/docker/arm64/Dockerfile b/docker/arm64/Dockerfile deleted file mode 100644 index b45a4f73..00000000 --- a/docker/arm64/Dockerfile +++ /dev/null @@ -1,314 +0,0 @@ -# Copyright (C) 2019 VyOS maintainers and contributors -# -# This program is free software; you can redistribute it and/or modify -# in order to easy exprort images built to "external" world -# it under the terms of the GNU General Public License version 2 or later as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Must be run with --privileged flag, recommended to run the container with a -# volume mapped in order to easy export images - -FROM multiarch/debian-debootstrap:arm64-buster-slim -LABEL authors="VyOS Maintainers <maintainers@vyos.io>" - -ENV DEBIAN_FRONTEND noninteractive - -# Standard shell should be bash not dash -RUN echo "dash dash/sh boolean false" | debconf-set-selections && \ - dpkg-reconfigure dash - -RUN apt-get update && apt-get install -y \ - dialog \ - apt-utils \ - locales - -RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen -ENV LANG en_US.utf8 - -RUN apt-get update && apt-get install -y \ - vim \ - git \ - curl \ - make \ - sudo \ - mc \ - pbuilder \ - devscripts \ - squashfs-tools \ - autoconf \ - automake \ - dpkg-dev \ - genisoimage \ - lsb-release \ - fakechroot \ - libtool \ - libapt-pkg-dev \ - parted \ - kpartx \ - quilt \ - python3-lxml \ - python3-setuptools \ - python3-nose \ - python3-coverage \ - python3-sphinx \ - python3-pystache \ - python3-git \ - python3-pip \ - pkg-config \ - debhelper \ - gosu \ - live-build \ - jq - -# Package needed for mdns-repeater -RUN apt-get update && apt-get install -y \ - dh-systemd - -# -# Building libvyosconf requires a full configured OPAM/OCaml setup -# -RUN apt-get update && apt-get install -y \ - libffi-dev \ - libpcre3-dev - -RUN curl https://raw.githubusercontent.com/ocaml/opam/2.0.2/shell/install.sh --output /tmp/opam_install.sh && \ - sed -i 's/read BINDIR/BINDIR=""/' /tmp/opam_install.sh && sh /tmp/opam_install.sh && \ - opam init --root=/opt/opam --comp=4.07.0 --disable-sandboxing - -RUN eval $(opam env --root=/opt/opam --set-root) && \ - opam install -y \ - oasis - -RUN eval $(opam env --root=/opt/opam --set-root) && opam install -y \ - fileutils \ - lwt \ - lwt_ppx \ - lwt_log \ - ocplib-endian \ - ounit \ - pcre \ - ppx_deriving_yojson \ - sha \ - toml \ - xml-light \ - batteries \ - ocaml-protoc \ - ctypes-foreign \ - menhir - -RUN eval $(opam env --root=/opt/opam --set-root) && opam install -y \ - ctypes - -# Build VyConf which is required to build libvyosconfig -RUN eval $(opam env --root=/opt/opam --set-root) && \ - opam pin add vyconf https://github.com/vyos/vyconf.git#51d79a3f -y - -# Build libvyosconfig -RUN eval $(opam env --root=/opt/opam --set-root) && \ - git clone https://github.com/vyos/libvyosconfig.git && \ - cd libvyosconfig && git checkout 9a80a5d3 && \ - dpkg-buildpackage -uc -us -tc -b && \ - dpkg -i ../libvyosconfig0_*.deb - -# Packages needed for vyatta-cfg -RUN apt-get update && apt-get install -y \ - libglib2.0-dev \ - libperl-dev \ - libboost-filesystem-dev - -# Packages needed for vyatta-iproute -RUN apt-get update && apt-get install -y \ - iptables-dev \ - libatm1-dev \ - libcap-dev \ - libdb-dev \ - libelf-dev \ - libselinux1-dev - -# Packages needed for vyatta-webgui -RUN apt-get update && apt-get install -y \ - libexpat1-dev \ - subversion - -# Packages needed for pmacct -RUN apt-get update && apt-get install -y \ - libpcap-dev \ - libpq-dev \ - default-libmysqlclient-dev \ - libgeoip-dev \ - librabbitmq-dev \ - libjansson-dev \ - librdkafka-dev \ - libnetfilter-log-dev - -# Pavkages needed for wireguard -RUN apt-get update && apt-get install -y \ - libmnl-dev - -# Packages needed for kernel -RUN apt-get update && apt-get install -y \ - libncurses5-dev \ - flex \ - bison \ - libelf-dev \ - bc \ - kmod - -# Packages needed for vyos-accel-ppp -RUN apt-get update && apt-get install -y \ - cdbs \ - cmake \ - liblua5.1-dev - -# Prerequisites for building rtrlib -# see http://docs.frrouting.org/projects/dev-guide/en/latest/building-frr-for-debian8.html -RUN apt-get update && apt-get install -y \ - graphviz \ - doxygen \ - libssh-dev \ - libssl-dev - -# Build rtrlib release 0.6.3 -RUN export RTRLIB_VERSION="0.6.3" && \ - wget -P /tmp https://github.com/rtrlib/rtrlib/archive/v${RTRLIB_VERSION}.tar.gz && \ - tar xf /tmp/v${RTRLIB_VERSION}.tar.gz -C /tmp && \ - cd /tmp/rtrlib-${RTRLIB_VERSION} && dpkg-buildpackage -uc -us -tc -b && \ - dpkg -i ../librtr*.deb - -# Packages needed to build frr itself -# https://github.com/FRRouting/frr/blob/master/doc/developer/building-libyang.rst -# for more info -RUN apt-get update && apt-get install -y \ - libyang-dev \ - libyang0.16 \ - chrpath \ - install-info \ - libjson-c-dev \ - libpython3-dev \ - python3-dev \ - python3-pytest \ - texinfo - -# Packages needed for conntrack-tools -RUN apt-get update && apt-get install -y \ - libnetfilter-conntrack-dev \ - libnetfilter-cthelper0-dev \ - libnetfilter-cttimeout-dev \ - libnetfilter-queue-dev - -# Packages needed for hvinfo -RUN apt-get update && apt-get install -y \ - gnat \ - gprbuild - -# Packages needed for vyos-1x -RUN apt-get update && apt-get install -y \ - whois - -# Packages needed for vyos-xe-guest-utilities -RUN apt-get update && apt-get install -y \ - golang - -# Packages needed for ipaddrcheck -RUN apt-get update && apt-get install -y \ - libcidr0 \ - libcidr-dev \ - check - -# Packages needed for lldpd -RUN apt-get update && apt-get install -y \ - libbsd-dev \ - libevent-dev - -# Packages needed for vyatta-quagga -RUN apt-get update && apt-get install -y \ - libpam-dev \ - libcap-dev \ - libsnmp-dev \ - gawk - -# Packages needed for vyos-strongswan -RUN apt-get update && apt-get install -y \ - libkrb5-dev \ - libssl-dev \ - libxml2-dev \ - systemd \ - libcurl4-openssl-dev \ - libgcrypt20-dev \ - libgmp3-dev \ - libldap2-dev \ - libsqlite3-dev \ - dh-apparmor \ - gperf \ - libsystemd-dev \ - python3-stdeb \ - python-setuptools - -# Packages needed for vyos-opennhrp -RUN apt-get update && apt-get install -y \ - libc-ares-dev - -# Packages needed for ddclient -RUN apt-get update && apt-get install -y \ - xmlto - -# Packages needed for keepalived -RUN apt-get update && apt-get install -y \ - libnl-3-200 \ - libnl-3-dev \ - libnl-nf-3-200 \ - libnl-nf-3-dev \ - libipset-dev \ - libnl-genl-3-200 \ - libnl-genl-3-dev \ - libpopt-dev - -# Packages needed for net-snmp -RUN apt-get update && apt-get install -y \ - python-all \ - python2.7-dev \ - libmariadb-dev - -# Install packer -RUN export LATEST="$(curl -s https://checkpoint-api.hashicorp.com/v1/check/packer | \ - jq -r -M '.current_version')"; \ - echo "url https://releases.hashicorp.com/packer/"$LATEST"/packer_"$LATEST"_linux_arm64.zip" |\ - curl -K- | gzip -d > /usr/bin/packer && \ - chmod +x /usr/bin/packer - -# -# live-build: building in docker fails with mounting /proc | /sys -# -# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919659 -# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=921815 -# https://salsa.debian.org/installer-team/debootstrap/merge_requests/26 -# -RUN wget https://salsa.debian.org/klausenbusk-guest/debootstrap/commit/a9a603b17cadbf52cb98cde0843dc9f23a08b0da.patch && \ - git clone https://salsa.debian.org/installer-team/debootstrap && \ - cd debootstrap && \ - git checkout 1.0.114 && \ - patch -p1 < ../a9a603b17cadbf52cb98cde0843dc9f23a08b0da.patch && \ - dch -n "Applying fix for docker image compile" && \ - dpkg-buildpackage -us -uc && \ - sudo dpkg -i ../debootstrap*.deb - -# Allow password-less 'sudo' for all users in group 'sudo' -RUN sed "s/^%sudo.*/%sudo\tALL=(ALL) NOPASSWD:ALL/g" -i /etc/sudoers && \ - chmod a+s /usr/sbin/useradd /usr/sbin/groupadd /usr/sbin/gosu /usr/sbin/usermod - -# Ensure sure all users have access to our OCAM installation -RUN echo "$(opam env --root=/opt/opam --set-root)" >> /etc/skel/.bashrc - -# Cleanup -RUN rm -rf /tmp/* - -COPY entrypoint.sh /usr/local/bin/entrypoint.sh -ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] diff --git a/docker/armhf/Dockerfile b/docker/armhf/Dockerfile deleted file mode 100644 index 1ac51b61..00000000 --- a/docker/armhf/Dockerfile +++ /dev/null @@ -1,314 +0,0 @@ -# Copyright (C) 2019 VyOS maintainers and contributors -# -# This program is free software; you can redistribute it and/or modify -# in order to easy exprort images built to "external" world -# it under the terms of the GNU General Public License version 2 or later as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -# Must be run with --privileged flag, recommended to run the container with a -# volume mapped in order to easy export images - -FROM multiarch/debian-debootstrap:armhf-buster-slim -LABEL authors="VyOS Maintainers <maintainers@vyos.io>" - -ENV DEBIAN_FRONTEND noninteractive - -# Standard shell should be bash not dash -RUN echo "dash dash/sh boolean false" | debconf-set-selections && \ - dpkg-reconfigure dash - -RUN apt-get update && apt-get install -y \ - dialog \ - apt-utils \ - locales - -RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen -ENV LANG en_US.utf8 - -RUN apt-get update && apt-get install -y \ - vim \ - git \ - curl \ - make \ - sudo \ - mc \ - pbuilder \ - devscripts \ - squashfs-tools \ - autoconf \ - automake \ - dpkg-dev \ - genisoimage \ - lsb-release \ - fakechroot \ - libtool \ - libapt-pkg-dev \ - parted \ - kpartx \ - quilt \ - python3-lxml \ - python3-setuptools \ - python3-nose \ - python3-coverage \ - python3-sphinx \ - python3-pystache \ - python3-git \ - python3-pip \ - pkg-config \ - debhelper \ - gosu \ - live-build \ - jq - -# Package needed for mdns-repeater -RUN apt-get update && apt-get install -y \ - dh-systemd - -# -# Building libvyosconf requires a full configured OPAM/OCaml setup -# -RUN apt-get update && apt-get install -y \ - libffi-dev \ - libpcre3-dev - -RUN curl -k https://raw.githubusercontent.com/ocaml/opam/2.0.2/shell/install.sh --output /tmp/opam_install.sh && \ - sed -i 's/read BINDIR/BINDIR=""/' /tmp/opam_install.sh && sh /tmp/opam_install.sh && \ - opam init --root=/opt/opam --comp=4.07.0 --disable-sandboxing - -RUN eval $(opam env --root=/opt/opam --set-root) && \ - opam install -y \ - oasis - -RUN eval $(opam env --root=/opt/opam --set-root) && opam install -y \ - fileutils \ - lwt \ - lwt_ppx \ - lwt_log \ - ocplib-endian \ - ounit \ - pcre \ - ppx_deriving_yojson \ - sha \ - toml \ - xml-light \ - batteries \ - ocaml-protoc \ - ctypes-foreign \ - menhir - -RUN eval $(opam env --root=/opt/opam --set-root) && opam install -y \ - ctypes - -# Build VyConf which is required to build libvyosconfig -RUN eval $(opam env --root=/opt/opam --set-root) && \ - opam pin add vyconf https://github.com/vyos/vyconf.git#51d79a3f -y - -# Build libvyosconfig -RUN eval $(opam env --root=/opt/opam --set-root) && \ - git clone https://github.com/vyos/libvyosconfig.git && \ - cd libvyosconfig && git checkout 9a80a5d3 && \ - dpkg-buildpackage -uc -us -tc -b && \ - dpkg -i ../libvyosconfig0_*.deb - -# Packages needed for vyatta-cfg -RUN apt-get update && apt-get install -y \ - libglib2.0-dev \ - libperl-dev \ - libboost-filesystem-dev - -# Packages needed for vyatta-iproute -RUN apt-get update && apt-get install -y \ - iptables-dev \ - libatm1-dev \ - libcap-dev \ - libdb-dev \ - libelf-dev \ - libselinux1-dev - -# Packages needed for vyatta-webgui -RUN apt-get update && apt-get install -y \ - libexpat1-dev \ - subversion - -# Packages needed for pmacct -RUN apt-get update && apt-get install -y \ - libpcap-dev \ - libpq-dev \ - default-libmysqlclient-dev \ - libgeoip-dev \ - librabbitmq-dev \ - libjansson-dev \ - librdkafka-dev \ - libnetfilter-log-dev - -# Pavkages needed for wireguard -RUN apt-get update && apt-get install -y \ - libmnl-dev - -# Packages needed for kernel -RUN apt-get update && apt-get install -y \ - libncurses5-dev \ - flex \ - bison \ - libelf-dev \ - bc \ - kmod - -# Packages needed for vyos-accel-ppp -RUN apt-get update && apt-get install -y \ - cdbs \ - cmake \ - liblua5.1-dev - -# Prerequisites for building rtrlib -# see http://docs.frrouting.org/projects/dev-guide/en/latest/building-frr-for-debian8.html -RUN apt-get update && apt-get install -y \ - graphviz \ - doxygen \ - libssh-dev \ - libssl-dev - -# Build rtrlib release 0.6.3 -RUN export RTRLIB_VERSION="0.6.3" && \ - wget -P /tmp https://github.com/rtrlib/rtrlib/archive/v${RTRLIB_VERSION}.tar.gz && \ - tar xf /tmp/v${RTRLIB_VERSION}.tar.gz -C /tmp && \ - cd /tmp/rtrlib-${RTRLIB_VERSION} && dpkg-buildpackage -uc -us -tc -b && \ - dpkg -i ../librtr*.deb - -# Packages needed to build frr itself -# https://github.com/FRRouting/frr/blob/master/doc/developer/building-libyang.rst -# for more info -RUN apt-get update && apt-get install -y \ - libyang-dev \ - libyang0.16 \ - chrpath \ - install-info \ - libjson-c-dev \ - libpython3-dev \ - python3-dev \ - python3-pytest \ - texinfo - -# Packages needed for conntrack-tools -RUN apt-get update && apt-get install -y \ - libnetfilter-conntrack-dev \ - libnetfilter-cthelper0-dev \ - libnetfilter-cttimeout-dev \ - libnetfilter-queue-dev - -# Packages needed for hvinfo -RUN apt-get update && apt-get install -y \ - gnat \ - gprbuild - -# Packages needed for vyos-1x -RUN apt-get update && apt-get install -y \ - whois - -# Packages needed for vyos-xe-guest-utilities -RUN apt-get update && apt-get install -y \ - golang - -# Packages needed for ipaddrcheck -RUN apt-get update && apt-get install -y \ - libcidr0 \ - libcidr-dev \ - check - -# Packages needed for lldpd -RUN apt-get update && apt-get install -y \ - libbsd-dev \ - libevent-dev - -# Packages needed for vyatta-quagga -RUN apt-get update && apt-get install -y \ - libpam-dev \ - libcap-dev \ - libsnmp-dev \ - gawk - -# Packages needed for vyos-strongswan -RUN apt-get update && apt-get install -y \ - libkrb5-dev \ - libssl-dev \ - libxml2-dev \ - systemd \ - libcurl4-openssl-dev \ - libgcrypt20-dev \ - libgmp3-dev \ - libldap2-dev \ - libsqlite3-dev \ - dh-apparmor \ - gperf \ - libsystemd-dev \ - python3-stdeb \ - python-setuptools - -# Packages needed for vyos-opennhrp -RUN apt-get update && apt-get install -y \ - libc-ares-dev - -# Packages needed for ddclient -RUN apt-get update && apt-get install -y \ - xmlto - -# Packages needed for keepalived -RUN apt-get update && apt-get install -y \ - libnl-3-200 \ - libnl-3-dev \ - libnl-nf-3-200 \ - libnl-nf-3-dev \ - libipset-dev \ - libnl-genl-3-200 \ - libnl-genl-3-dev \ - libpopt-dev - -# Packages needed for net-snmp -RUN apt-get update && apt-get install -y \ - python-all \ - python2.7-dev \ - libmariadb-dev - -# Install packer -RUN export LATEST="$(curl -k -s https://checkpoint-api.hashicorp.com/v1/check/packer | \ - jq -r -M '.current_version')"; \ - echo "url https://releases.hashicorp.com/packer/"$LATEST"/packer_"$LATEST"_linux_arm.zip" |\ - curl -k -K- | gzip -d > /usr/bin/packer && \ - chmod +x /usr/bin/packer - -# -# live-build: building in docker fails with mounting /proc | /sys -# -# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=919659 -# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=921815 -# https://salsa.debian.org/installer-team/debootstrap/merge_requests/26 -# -RUN wget https://salsa.debian.org/klausenbusk-guest/debootstrap/commit/a9a603b17cadbf52cb98cde0843dc9f23a08b0da.patch && \ - git clone https://salsa.debian.org/installer-team/debootstrap && \ - cd debootstrap && \ - git checkout 1.0.114 && \ - patch -p1 < ../a9a603b17cadbf52cb98cde0843dc9f23a08b0da.patch && \ - dch -n "Applying fix for docker image compile" && \ - dpkg-buildpackage -us -uc && \ - sudo dpkg -i ../debootstrap*.deb - -# Allow password-less 'sudo' for all users in group 'sudo' -RUN sed "s/^%sudo.*/%sudo\tALL=(ALL) NOPASSWD:ALL/g" -i /etc/sudoers && \ - chmod a+s /usr/sbin/useradd /usr/sbin/groupadd /usr/sbin/gosu /usr/sbin/usermod - -# Ensure sure all users have access to our OCAM installation -RUN echo "$(opam env --root=/opt/opam --set-root)" >> /etc/skel/.bashrc - -# Cleanup -RUN rm -rf /tmp/* - -COPY entrypoint.sh /usr/local/bin/entrypoint.sh -ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] |