-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathJenkinsfile
More file actions
81 lines (80 loc) · 3.58 KB
/
Jenkinsfile
File metadata and controls
81 lines (80 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
def resolveProgetVersion(String product, String version, String label) {
def url = "http://proget.build.couchbase.com:8080/api/latest_release?product=${product}&version=${version}&prerelease=true"
echo "Resolving ${label}: ${url}"
def resolved
if (isUnix()) {
resolved = sh(script: "curl -sf '${url}' | jq -r .version", returnStdout: true).trim()
} else {
resolved = powershell(script: """
try { (Invoke-RestMethod '${url}').version }
catch { Write-Error "ProGet request failed for ${label}: \$_"; exit 1 }
""".stripIndent(), returnStdout: true).trim()
}
if (!resolved || resolved == 'null') { error "Could not resolve ${label} from '${version}' (url: ${url})" }
echo "Resolved ${label}: ${resolved}"
return resolved
}
pipeline {
agent none
parameters {
string(name: 'CBL_VERSION', defaultValue: '3', description: 'Couchbase Lite Version to use')
string(name: 'SGW_VERSION', defaultValue: '4', description: 'Sync Gateway Version to use')
}
stages {
stage('Init') {
agent any
steps {
script {
if (params.CBL_VERSION == '') { error "CBL_VERSION is required" }
if (params.SGW_VERSION == '') { error "SGW_VERSION is required" }
env.CBL_VERSION = resolveProgetVersion("couchbase-lite-ios", params.CBL_VERSION, 'CBL_VERSION')
env.SGW_VERSION = resolveProgetVersion('sync-gateway', params.SGW_VERSION, 'SGW_VERSION')
currentBuild.displayName = "CBL:${env.CBL_VERSION} SGW:${env.SGW_VERSION} (#${currentBuild.number})"
}
}
}
stage('Prebuild Servers') {
steps {
build job: 'prebuild-test-server',
parameters: [
string(name: 'TS_PLATFORM', value: 'swift_ios'),
string(name: 'CBL_VERSION', value: env.CBL_VERSION),
],
wait: true,
propagate: true
}
}
stage('Run Test') {
agent { label 'mac-mini-new' }
environment {
KEYCHAIN_PASSWORD = credentials('mac-mini-new-keychain-password')
PATH = "/opt/homebrew/opt/python@3.10/bin:/opt/homebrew/bin:/usr/local/bin:${env.PATH}"
TS_ARTIFACTS_DIR = 'sgw'
}
steps {
// Unlock keychain:
sh "security unlock-keychain -p '${KEYCHAIN_PASSWORD}' ~/Library/Keychains/login.keychain-db"
echo "=== Run SGW Tests"
timeout(time: 90, unit: 'MINUTES') {
sh "jenkins/pipelines/QE/sgw/test.sh ${env.CBL_VERSION} ${env.SGW_VERSION}"
}
echo "=== SGW Tests Complete"
}
post {
always {
echo "=== Teardown SGW Tests"
timeout(time: 5, unit: 'MINUTES') {
sh "jenkins/pipelines/QE/sgw/teardown.sh"
}
archiveArtifacts artifacts: 'tests/QE/sgw/**/*', fingerprint: true, allowEmptyArchive: true
echo "=== SGW Test Teardown Complete"
}
}
}
}
post {
failure {
mail bcc: '', body: "Project: <a href='${env.BUILD_URL}'>${env.JOB_NAME}</a> has failed!", cc: '', charset: 'UTF-8', from: 'jenkins@couchbase.com', mimeType: 'text/html', replyTo: 'no-reply@couchbase.com', subject: "${env.JOB_NAME} failed", to: "vipul.bhardwaj@couchbase.com";
}
}
}