diff options
Diffstat (limited to 'scripts/ci')
-rw-r--r-- | scripts/ci/Dockerfile.bitbake | 36 | ||||
-rw-r--r-- | scripts/ci/Jenkinsfile.bleeding | 74 | ||||
-rw-r--r-- | scripts/ci/README.adoc | 14 | ||||
-rwxr-xr-x | scripts/ci/build.sh | 18 | ||||
-rwxr-xr-x | scripts/ci/configure.sh | 54 |
5 files changed, 196 insertions, 0 deletions
diff --git a/scripts/ci/Dockerfile.bitbake b/scripts/ci/Dockerfile.bitbake new file mode 100644 index 0000000..4dfafec --- /dev/null +++ b/scripts/ci/Dockerfile.bitbake | |||
@@ -0,0 +1,36 @@ | |||
1 | FROM debian:stable | ||
2 | LABEL Description="Image for bitbaking" | ||
3 | |||
4 | RUN sed -i 's#deb http://deb.debian.org/debian stable main#deb http://deb.debian.org/debian stable main contrib#g' /etc/apt/sources.list | ||
5 | RUN sed -i 's#deb http://deb.debian.org/debian stable-updates main#deb http://deb.debian.org/debian stable-updates main contrib#g' /etc/apt/sources.list | ||
6 | RUN apt-get update -q && apt-get install -qy \ | ||
7 | build-essential \ | ||
8 | bzip2 \ | ||
9 | chrpath \ | ||
10 | cpio \ | ||
11 | default-jre \ | ||
12 | diffstat \ | ||
13 | gawk \ | ||
14 | gcc-multilib \ | ||
15 | git-core \ | ||
16 | iputils-ping \ | ||
17 | iproute \ | ||
18 | libpython-dev \ | ||
19 | libsdl1.2-dev \ | ||
20 | locales \ | ||
21 | procps \ | ||
22 | python \ | ||
23 | python3 \ | ||
24 | python3-pexpect \ | ||
25 | qemu \ | ||
26 | socat \ | ||
27 | texinfo \ | ||
28 | unzip \ | ||
29 | wget \ | ||
30 | xterm \ | ||
31 | xz-utils | ||
32 | |||
33 | RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen | ||
34 | ENV LC_ALL="en_US.UTF-8" | ||
35 | ENV LANG="en_US.UTF-8" | ||
36 | ENV LANGUAGE="en_US.UTF-8" | ||
diff --git a/scripts/ci/Jenkinsfile.bleeding b/scripts/ci/Jenkinsfile.bleeding new file mode 100644 index 0000000..6d0f1e7 --- /dev/null +++ b/scripts/ci/Jenkinsfile.bleeding | |||
@@ -0,0 +1,74 @@ | |||
1 | // This CI setup checks out aktualizr, meta-updater and updater-repo and builds | ||
2 | // master branches whenever a change is pushed to any of these | ||
3 | |||
4 | pipeline { | ||
5 | agent none | ||
6 | environment { | ||
7 | TEST_AKTUALIZR_REMOTE = 'aktualizr' | ||
8 | TEST_AKTUALIZR_DIR = 'aktualizr' | ||
9 | TEST_AKTUALIZR_BRANCH = 'master' | ||
10 | TEST_BITBAKE_COMMON_DIR = "/opt/jenkins/bitbake-common" | ||
11 | } | ||
12 | stages { | ||
13 | stage('checkout') { | ||
14 | agent any | ||
15 | steps { | ||
16 | checkout([$class: 'GitSCM', | ||
17 | userRemoteConfigs: [ | ||
18 | [url: 'https://github.com/advancedtelematic/aktualizr', name: 'aktualizr'] | ||
19 | ], | ||
20 | branches: [[name: 'refs/heads/master']], | ||
21 | extensions: [ | ||
22 | [$class: 'DisableRemotePoll'], | ||
23 | [$class: 'PruneStaleBranch'], | ||
24 | [$class: 'RelativeTargetDirectory', | ||
25 | relativeTargetDir: 'aktualizr' | ||
26 | ] | ||
27 | ], | ||
28 | ]) | ||
29 | |||
30 | checkout([$class: 'RepoScm', | ||
31 | manifestRepositoryUrl: 'https://github.com/advancedtelematic/updater-repo', | ||
32 | manifestBranch: null, | ||
33 | manifestFile: 'master.xml', | ||
34 | manifestGroup: null, | ||
35 | mirrorDir: null, | ||
36 | jobs: 0, | ||
37 | depth: 0, | ||
38 | localManifest: null, | ||
39 | destinationDir: 'updater-repo', | ||
40 | repoUrl: null, | ||
41 | currentBranch: false, | ||
42 | resetFirst: true, | ||
43 | quiet: false, | ||
44 | trace: false, | ||
45 | showAllChanges: false, | ||
46 | ]) | ||
47 | |||
48 | // ignore bitbake build directories in docker | ||
49 | sh 'echo \'build*\' > .dockerignore' | ||
50 | |||
51 | // override meta-updater commit with currently tested branch | ||
52 | sh ''' | ||
53 | META_UPDATER_COMMIT=$(git rev-parse HEAD) | ||
54 | cd updater-repo/meta-updater | ||
55 | git checkout $META_UPDATER_COMMIT | ||
56 | ''' | ||
57 | } | ||
58 | } | ||
59 | stage('build-core-image-minimal') { | ||
60 | agent { | ||
61 | dockerfile { | ||
62 | filename 'scripts/ci/Dockerfile.bitbake' | ||
63 | args '-v /opt/jenkins/bitbake-common:/opt/jenkins/bitbake-common' | ||
64 | } | ||
65 | } | ||
66 | steps { | ||
67 | sh 'scripts/ci/configure.sh' | ||
68 | |||
69 | sh 'scripts/ci/build.sh core-image-minimal' | ||
70 | } | ||
71 | } | ||
72 | } | ||
73 | } | ||
74 | // vim: set ft=groovy tabstop=2 shiftwidth=2 expandtab: | ||
diff --git a/scripts/ci/README.adoc b/scripts/ci/README.adoc new file mode 100644 index 0000000..222982b --- /dev/null +++ b/scripts/ci/README.adoc | |||
@@ -0,0 +1,14 @@ | |||
1 | = Jenkins setup for running meta-updater CI | ||
2 | |||
3 | As bitbake is quite resource-hungry, there are some special steps that are | ||
4 | needed to run Jenkins CI tasks: | ||
5 | |||
6 | - docker should be installed and the `jenkins` unix user should belong to | ||
7 | the `docker` group | ||
8 | - `/opt/jenkins` should exist and have `jenkins:jenkins` permissions, it | ||
9 | will be mapped as a volume on the same location in the docker build | ||
10 | container | ||
11 | |||
12 | Note that for nodes running Jenkins slaves as a docker container, the | ||
13 | `/opt/jenkins` directory must exist on the host system as well, with | ||
14 | permissions matching the user and groupd ids in Jenkins' docker | ||
diff --git a/scripts/ci/build.sh b/scripts/ci/build.sh new file mode 100755 index 0000000..6235428 --- /dev/null +++ b/scripts/ci/build.sh | |||
@@ -0,0 +1,18 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | set -euo pipefail | ||
4 | set -x | ||
5 | |||
6 | TEST_MACHINE=${TEST_MACHINE:-qemux86-64} | ||
7 | TEST_BUILD_DIR=${TEST_BUILD_DIR:-build} | ||
8 | TEST_REPO_DIR=${TEST_REPO_DIR:-updater-repo} | ||
9 | |||
10 | IMAGE_NAME=${1:-core-image-minimal} | ||
11 | |||
12 | ( | ||
13 | set +euo pipefail | ||
14 | set +x | ||
15 | . "${TEST_REPO_DIR}/meta-updater/scripts/envsetup.sh" "${TEST_MACHINE}" "${TEST_BUILD_DIR}" | ||
16 | |||
17 | bitbake "${IMAGE_NAME}" | ||
18 | ) | ||
diff --git a/scripts/ci/configure.sh b/scripts/ci/configure.sh new file mode 100755 index 0000000..1e87a7b --- /dev/null +++ b/scripts/ci/configure.sh | |||
@@ -0,0 +1,54 @@ | |||
1 | #!/bin/bash | ||
2 | |||
3 | set -euo pipefail | ||
4 | set -x | ||
5 | |||
6 | TEST_MACHINE=${TEST_MACHINE:-qemux86-64} | ||
7 | TEST_BUILD_DIR=${TEST_BUILD_DIR:-build} | ||
8 | TEST_REPO_DIR=${TEST_REPO_DIR:-updater-repo} | ||
9 | |||
10 | TEST_AKTUALIZR_DIR=${TEST_AKTUALIZR_DIR:-.} | ||
11 | TEST_AKTUALIZR_BRANCH=${TEST_AKTUALIZR_BRANCH:-master} | ||
12 | TEST_AKTUALIZR_REV=${TEST_AKTUALIZR_REV:-$(GIT_DIR="$TEST_AKTUALIZR_DIR/.git" git rev-parse "$TEST_AKTUALIZR_REMOTE/$TEST_AKTUALIZR_BRANCH")} | ||
13 | TEST_BITBAKE_COMMON_DIR=${TEST_BITBAKE_COMMON_DIR:-} | ||
14 | |||
15 | # move existing conf directory to backup, before generating a new one | ||
16 | rm -rf "${TEST_BUILD_DIR}/conf.old" || true | ||
17 | mv "${TEST_BUILD_DIR}/conf" "${TEST_BUILD_DIR}/conf.old" || true | ||
18 | |||
19 | ( | ||
20 | set +euo pipefail | ||
21 | set +x | ||
22 | echo ">> Running envsetup.sh" | ||
23 | . "${TEST_REPO_DIR}/meta-updater/scripts/envsetup.sh" "${TEST_MACHINE}" "${TEST_BUILD_DIR}" | ||
24 | ) | ||
25 | |||
26 | set +x | ||
27 | |||
28 | echo ">> Set common bitbake config options" | ||
29 | cat << EOF > "${TEST_BUILD_DIR}/conf/site.conf" | ||
30 | SANITY_TESTED_DISTROS = "" | ||
31 | SSTATE_MIRRORS ?= "file://.* https://bitbake-cache.atsgarage.com/PATH;downloadfilename=PATH" | ||
32 | IMAGE_FEATURES += "ssh-server-openssh" | ||
33 | |||
34 | EOF | ||
35 | |||
36 | echo ">> Set aktualizr branch in bitbake's config" | ||
37 | cat << EOF >> "${TEST_BUILD_DIR}/conf/site.conf" | ||
38 | SRCREV_pn-aktualizr = "$TEST_AKTUALIZR_REV" | ||
39 | SRCREV_pn-aktualizr-native = "\${SRCREV_pn-aktualizr}" | ||
40 | BRANCH_pn-aktualizr = "$TEST_AKTUALIZR_BRANCH" | ||
41 | BRANCH_pn-aktualizr-native = "\${BRANCH_pn-aktualizr}" | ||
42 | |||
43 | EOF | ||
44 | |||
45 | if [[ -n $TEST_BITBAKE_COMMON_DIR ]]; then | ||
46 | echo ">> Set caching" | ||
47 | SSTATE_DIR="$TEST_BITBAKE_COMMON_DIR/sstate-cache" | ||
48 | DL_DIR="$TEST_BITBAKE_COMMON_DIR/downloads" | ||
49 | mkdir -p "$SSTATE_DIR" "$DL_DIR" | ||
50 | cat << EOF >> "${TEST_BUILD_DIR}/conf/site.conf" | ||
51 | SSTATE_DIR = "$SSTATE_DIR" | ||
52 | DL_DIR = "$DL_DIR" | ||
53 | EOF | ||
54 | fi | ||