← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~adam-collard/maas-ci/+git/maas-ci-internal:build-env-site-manager into ~maas-committers/maas-ci/+git/maas-ci-internal:main

 

Adam Collard has proposed merging ~adam-collard/maas-ci/+git/maas-ci-internal:build-env-site-manager into ~maas-committers/maas-ci/+git/maas-ci-internal:main.

Commit message:
WiP: Add build-env-maas-site-manager



Requested reviews:
  MAAS Committers (maas-committers)

For more details, see:
https://code.launchpad.net/~adam-collard/maas-ci/+git/maas-ci-internal/+merge/438687
-- 
Your team MAAS Committers is requested to review the proposed merge of ~adam-collard/maas-ci/+git/maas-ci-internal:build-env-site-manager into ~maas-committers/maas-ci/+git/maas-ci-internal:main.
diff --git a/Dockerfile b/Dockerfile
index fdbc3c6..12e9fe1 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -2,17 +2,14 @@ ARG SERIES=bionic
 FROM ubuntu:${SERIES}
 
 ARG CACHE_BUST
-ARG GIT_REPOS="git://git.launchpad.net/maas"
-ARG GIT_BRANCH="master"
 ARG MAKE_TARGET="install-dependencies"
 
-ENV GIT_REPOS=${GIT_REPOS}
-ENV GIT_BRANCH=${GIT_BRANCH}
 ENV MAKE_TARGET=${MAKE_TARGET}
 ENV DEBIAN_FRONTEND=noninteractive
 
 WORKDIR /work
 
+ADD checkout checkout
 RUN set -ex                                                                                            ;\
     if [ ! -z $http_proxy ]; then                                                                       \
         echo "Acquire::https::proxy \"$http_proxy\";" > /etc/apt/apt.conf.d/maas-proxy                 ;\
@@ -39,6 +36,5 @@ RUN set -ex                                                                     
         wget
 
 RUN set -ex                                                                                            ;\
-    git clone ${GIT_REPOS} --single-branch --branch ${GIT_BRANCH} --depth 1 /work/checkout             ;\
     make -C /work/checkout ${MAKE_TARGET}                                                              ;\
     rm -rf /work/checkout
diff --git a/jobs/build-env-maas-site-manager.groovy b/jobs/build-env-maas-site-manager.groovy
new file mode 100644
index 0000000..2e82b5f
--- /dev/null
+++ b/jobs/build-env-maas-site-manager.groovy
@@ -0,0 +1,48 @@
+pipeline {
+    agent {
+        node {
+            label 'maas-tester'
+        }
+    }
+    stages {
+        stage('Checkout') {
+            steps {
+                withCredentials([sshUserPrivateKey(credentialsId: 'launchpad-ci-ssh-key', keyFileVariable: 'SSHKEY', usernameVariable: 'SSHUSER')]) {
+                    script {
+                        env.GIT_SSH_COMMAND = "ssh -i $SSHKEY -l $SSHUSER"
+                        env.targetShortHash = sh(returnStdout: true, script: "git ls-remote git+ssh://${LP_REPOS} -b ${LP_BRANCH} | cut -f1").trim()
+	            }
+                    sh '''
+                  rm -rf ci-utils launchpad-ci maas-site-manager maas_target_os_release
+                  git clone git+ssh://git.launchpad.net/{{ git_ci_repos }} --single-branch --branch main --recurse-submodules --depth 1 ci-utils
+                  if [ "${SERIES}" != "auto" ]; then
+                    echo ${SERIES} > maas_target_os_release
+                  else
+                    ci-utils/jobs/launchpad-ci/repo-ubuntu-release ${LP_REPOS} ${LP_BRANCH} > maas_target_os_release
+                  fi
+                '''
+	        }
+	        script {
+                    def shortHash = sh(returnStdout: true, script: "git -C ci-utils rev-parse --short HEAD").trim()
+                    currentBuild.description = "Build environment: maas-ci-utils ${shortHash} - maas ${targetShortHash}"
+                }
+            }
+        }
+        stage('Build image') {
+            steps {
+		checkout changelog: false, poll: false, scm: scmGit(branches: [[name: "ref/heads/${LP_BRANCH}"]], extensions: [cloneOption(depth: 1, honorRefspec: true, noTags: true, reference: '', shallow: true)], userRemoteConfigs: [[credentialsId: 'launchpad-ci-ssh-key', url: "git+ssh://${LP_REPOS}"]])
+                script {
+                    def os_release = sh(script:'cat maas_target_os_release', returnStdout: true).trim()
+                    def os_series = sh(script:"awk -F, \"/\$(echo ${os_release} | sed -e's/./\\.')/{ print \$3 }\" /usr/share/distro-info/ubuntu.csv", returnStdout: true).trim()
+                    docker.withRegistry("{{ docker_registry }}", "{{ docker_registry_cred }}") {
+                        def img = docker.build("build-env-{{ target }}-{{ series }}:${os_release}", "--build-arg 'SERIES=${os_release}' --build-arg CACHE_BUST='${BUILD_ID}' -f ci-utils/Dockerfile .")
+                        img.push()
+                        if (os_series) {
+                            img.push("${os_series}")
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/jobs/build-env-maas-site-manager.yaml b/jobs/build-env-maas-site-manager.yaml
new file mode 100644
index 0000000..0ba7490
--- /dev/null
+++ b/jobs/build-env-maas-site-manager.yaml
@@ -0,0 +1,46 @@
+- project:
+    name: build-env-site-manager
+    target: maas-site-manager
+    lp-repos: "git.launchpad.net/maas-site-manager"
+    ubuntu: "22.10"
+    series:
+      - main:
+          build-freq: 'H H(0-2) * * *'
+    jobs:
+      - "build-env-maas-site-manager-{series}-{ubuntu}":
+          lp-branch: "{series}"
+    views:
+      - "build-env-maas-site-manager"
+
+- view-template:
+    name: "build-env-maas-site-manager"
+    description: "Build env builder for MAAS Site Manager"
+    view-type: list
+    regex: "build-env-maas-site-manager-.*"
+
+- job-template:
+    name: "build-env-maas-site-manager-{series}-{ubuntu}"
+    build-freq: 'H H * * 6'
+    git_ci_repos: ~maas-committers/maas-ci/+git/maas-ci-internal
+    lp-branch: "main"
+    parameters:
+      - string:
+          description: "Source repos"
+          name: "LP_REPOS"
+          default: "{lp-repos}"
+      - string:
+          description: "Source branch"
+          name: "LP_BRANCH"
+          default: "{lp-branch}"
+      - string:
+          description: |
+            Ubuntu series to run tests on.
+            If set to 'auto', defaults to the target series for the branch.
+          name: "SERIES"
+          default: "{ubuntu}"
+    triggers:
+      - timed: "{build-freq}"
+    properties:
+      - build-discarder:
+          artifact-num-to-keep: 5
+    dsl: !include-jinja2: build-env-maas-site-manager.groovy
diff --git a/jobs/build-env-maas.groovy b/jobs/build-env-maas.groovy
index 8c3b409..c9bb084 100644
--- a/jobs/build-env-maas.groovy
+++ b/jobs/build-env-maas.groovy
@@ -30,12 +30,13 @@ pipeline {
         }
         stage('Build image') {
             steps {
+                checkout changelog: false, poll: false, scm: scmGit(branches: [[name: "ref/heads/${LP_BRANCH}"]], extensions: [cloneOption(depth: 1, honorRefspec: true, noTags: true, reference: '', shallow: true)], userRemoteConfigs: [[credentialsId: 'launchpad-ci-ssh-key', url: "git://${LP_REPOS}"]])
                 script {
                     def os_release = sh(script:'cat maas_target_os_release', returnStdout: true).trim()
                     def os_series = sh(script:"sed -n 's/^${os_release}[^,]\\+,[^,]\\+,\\([^,]\\+\\),.*/\\1/p' /usr/share/distro-info/ubuntu.csv", returnStdout: true).trim()
 
                     docker.withRegistry("{{ docker_registry }}", "{{ docker_registry_cred }}") {
-                        def img = docker.build("build-env-{{ target }}-{{ series }}:${os_release}", "--build-arg 'SERIES=${os_release}' --build-arg 'GIT_REPOS=git://${LP_REPOS}' --build-arg 'GIT_BRANCH=${LP_BRANCH}' --build-arg CACHE_BUST='${BUILD_ID}' -f ci-utils/Dockerfile .")
+                        def img = docker.build("build-env-{{ target }}-{{ series }}:${os_release}", "--build-arg 'SERIES=${os_release}' --build-arg CACHE_BUST='${BUILD_ID}' -f ci-utils/Dockerfile .")
                         img.push()
                         if (os_series) {
                             img.push("${os_series}")

References