this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add Jenkinsfile for my CI

+170
+170
ci/Jenkinsfile
··· 1 + pipeline { 2 + agent any 3 + 4 + triggers { 5 + githubPush() 6 + } 7 + 8 + environment { 9 + DEB_DISTRO = sh(script: 'lsb_release -cs', returnStdout: true).trim() 10 + ESCAPED_JOB_NAME = sh(script: 'echo "${JOB_NAME}" | sed \'s/\\//-/g\'', returnStdout: true).trim() 11 + REAL_WORKSPACE = "/home/jenkins/workspace/${JOB_BASE_NAME}/${JOB_NAME}" 12 + } 13 + 14 + options { 15 + skipDefaultCheckout() 16 + } 17 + 18 + stages { 19 + stage('Start Job') { 20 + steps { 21 + dir("${REAL_WORKSPACE}") { 22 + scmSkip(deleteBuild: true, skipPattern:'.*\\[ci skip\\].*') 23 + 24 + dir('source') { 25 + checkout scm 26 + } 27 + 28 + script { 29 + def buildNumber = env.BUILD_NUMBER as int 30 + if (buildNumber > 1) milestone(buildNumber - 1) 31 + milestone(buildNumber) 32 + 33 + while (fileExists('.job-running')) { 34 + sleep 1 35 + } 36 + } 37 + 38 + touch '.job-running' 39 + } 40 + } 41 + } 42 + 43 + stage('Workspace Setup') { 44 + when { 45 + not { 46 + expression { 47 + return fileExists("${REAL_WORKSPACE}/.workspace-setup") 48 + } 49 + } 50 + } 51 + 52 + steps { 53 + dir("${REAL_WORKSPACE}") { 54 + sh 'virt-clone --connect qemu:///system --original dtest-base --name dtest-${ESCAPED_JOB_NAME} --auto-clone --mac RANDOM' 55 + touch '.vm-cloned' 56 + 57 + sh 'virsh --connect qemu:///system snapshot-create-as --domain dtest-${ESCAPED_JOB_NAME} --name before-darling' 58 + touch '.vm-snapshotted' 59 + 60 + touch '.workspace-setup' 61 + } 62 + } 63 + } 64 + 65 + stage('Build') { 66 + steps { 67 + dir("${REAL_WORKSPACE}") { 68 + dir('source') { 69 + sh 'git submodule update --init --recursive' 70 + sh 'cd src/external/swift && git lfs install && git lfs pull' 71 + touch '../.submodules-cloned' 72 + 73 + //sh 'tools/debian/make-deb --dsc' 74 + sh 'tools/debian/make-deb' 75 + } 76 + 77 + sh 'rm -rf out' 78 + sh 'mkdir out' 79 + 80 + dir('out') { 81 + sh 'mv ../*.deb ./' 82 + sh 'rm ../*.*' 83 + } 84 + 85 + archiveArtifacts artifacts: 'out/**/*', fingerprint: true 86 + } 87 + } 88 + } 89 + 90 + stage('Test') { 91 + steps { 92 + dir("${REAL_WORKSPACE}") { 93 + sh 'virsh --connect qemu:///system start dtest-${ESCAPED_JOB_NAME}' 94 + touch '.vm-running' 95 + 96 + script { 97 + def vmIP = "" 98 + waitUntil { 99 + vmIP = sh(script: 'virtip dtest-${ESCAPED_JOB_NAME}', returnStdout: true) 100 + return vmIP != "" 101 + } 102 + vmIP = vmIP.trim() 103 + 104 + def remote = [:] 105 + remote.name = 'dtest-box' 106 + remote.host = vmIP 107 + remote.user = 'dtest' 108 + remote.password = 'dtest' 109 + remote.allowAnyHosts = true 110 + remote.retryCount = 5 111 + remote.retryWaitSec = 2 112 + 113 + sshPut remote: remote, from: 'out', into: '.' 114 + 115 + sshCommand remote: remote, command: 'echo dtest | sudo -S apt install -y ./out/darling-dkms*.deb' 116 + sshCommand remote: remote, command: 'echo dtest | sudo -S apt install -y ./out/darling_*.deb' 117 + 118 + // the initial shell must be in a screen because the pty is handed to launchd and ssh will stay connected 119 + // even after the shell exits because launchd is still using the pty. 120 + // 121 + // if the command fails, we'll know when we run our next command (if it did fail, that means Darling is failing to run 122 + // so launchd won't be holding on to the pty) 123 + sshCommand remote: remote, command: 'screen -d -m darling shell' 124 + sleep 5 // give Darling some time to initialize 125 + 126 + // if this doesn't report back within 3 minutes, something's definitely broken in Darling, so stop the testing early 127 + timeout(time: 180, unit: 'SECONDS') { 128 + sshCommand remote: remote, command: 'darling shell echo hi' 129 + } 130 + } 131 + } 132 + } 133 + } 134 + } 135 + 136 + post { 137 + cleanup { 138 + dir("${REAL_WORKSPACE}") { 139 + script { 140 + if (fileExists('.vm-running')) { 141 + // try to shut it down normally 142 + sh 'virsh --connect qemu:///system shutdown dtest-${ESCAPED_JOB_NAME}' 143 + try { 144 + retry(5) { 145 + sleep 1 146 + def isRunning = sh(script: 'virsh --connect qemu:///system list --all | grep " dtest-${ESCAPED_JOB_NAME} " | awk \'{ print $3}\'', returnStdout: true).trim() 147 + if (isRunning != "" && isRunning == "running") { 148 + throw new Exception("VM not shutdown yet") 149 + } 150 + } 151 + } catch (Exception e) { 152 + // force shut it down 153 + sh 'virsh --connect qemu:///system destroy dtest-${ESCAPED_JOB_NAME}' 154 + } 155 + 156 + sh 'virsh --connect qemu:///system snapshot-revert --domain dtest-${ESCAPED_JOB_NAME} --snapshotname before-darling' 157 + 158 + sh 'rm .vm-running' 159 + } 160 + 161 + if (!fileExists('.submodules-cloned')) { 162 + sh 'rm -rf source' 163 + } 164 + } 165 + 166 + sh 'rm .job-running' 167 + } 168 + } 169 + } 170 + }