-
Notifications
You must be signed in to change notification settings - Fork 1
/
Jenkinsfile
137 lines (117 loc) · 5.04 KB
/
Jenkinsfile
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/env groovy
/* Only keep the 10 most recent builds. */
def projectProperties = [
[$class: 'BuildDiscarderProperty',strategy: [$class: 'LogRotator', numToKeepStr: '5']],
]
def imageName = 'jenkinsciinfra/jenkinsio'
if (!env.CHANGE_ID) {
if (env.BRANCH_NAME == null) {
projectProperties.add(pipelineTriggers([cron('H/30 * * * *'), pollSCM('H/5 * * * *')]))
projectProperties.add(disableConcurrentBuilds())
}
}
properties(projectProperties)
try {
/* Assuming that wherever we're going to build, we have nodes labelled with
* "Docker" so we can have our own isolated build environment
*/
node('docker&&linux') {
stage('Clean workspace') {
/* Running on a fresh Docker instance makes this redundant, but just in
* case the host isn't configured to give us a new Docker image for every
* build, make sure we clean things before we do anything
*/
deleteDir()
sh 'ls -lah'
}
stage('Checkout source') {
/*
* For a standalone workflow script, we would use the `git` step
*
*
* git url: 'git://github.com/jenkinsci/jenkins.io',
* branch: 'master'
*/
/*
* Represents the SCM configuration in a "Workflow from SCM" project build. Use checkout
* scm to check out sources matching Jenkinsfile with the SCM details from
* the build that is executing this Jenkinsfile.
*
* when not in multibranch: https://issues.jenkins-ci.org/browse/JENKINS-31386
*/
checkout scm
}
stage('Build site') {
/* If the agent can't gather resources and build the site in 60 minutes,
* something is very wrong
*/
timeout(60) {
sh '''#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
set -o xtrace
make all
illegal_htaccess_content="$( find content -name '.htaccess' -type f -exec grep --extended-regexp --invert-match '^(#|ErrorDocument)' {} \\; )"
if [[ -n "$illegal_htaccess_content" ]] ; then
echo "Failing build due to illegal content in .htaccess files, only ErrorDocument is allowed:" >&2
echo "$illegal_htaccess_content" >&2
exit 1
fi
illegal_filename="$( find . -name '*[<>]*' )"
if [[ -n "$illegal_filename" ]] ; then
echo "Failing build due to illegal filename:" >&2
echo "$illegal_filename" >&2
exit 1
fi
'''
}
}
def container
stage('Build docker image'){
timestamps {
dir('docker'){
/* Only update docker tag when docker files change*/
def imageTag = sh(script: 'tar cf - docker | md5sum', returnStdout: true).take(6)
echo "Creating the container ${imageName}:${imageTag}"
container = docker.build("${imageName}:${imageTag}")
}
}
}
stage('Archive site') {
/* The `archive` task inside the Gradle build should be creating a zip file
* which we can use for the deployment of the site. This stage will archive
* that artifact so we can pick it up later
*/
archiveArtifacts artifacts: 'build/**/*.zip,build/_site/*.pdf', fingerprint: true
}
/* The Jenkins which deploys doesn't use multibranch or GitHub Org Folders
*/
if (env.BRANCH_NAME == null) {
stage('Publish on Azure') {
/* -> https://github.com/Azure/blobxfer
Require credential 'BLOBXFER_STORAGEACCOUNTKEY' set to the storage account key */
withCredentials([string(credentialsId: 'BLOBXFER_STORAGEACCOUNTKEY', variable: 'BLOBXFER_STORAGEACCOUNTKEY')]) {
sh './scripts/blobxfer upload --local-path /data/_site --storage-account-key $BLOBXFER_STORAGEACCOUNTKEY --storage-account prodjenkinsio --remote-path jenkinsio --recursive --mode file --skip-on-md5-match --file-md5'
}
}
stage('Publish docker image') {
infra.withDockerCredentials {
timestamps { container.push() }
}
}
}
}
}
catch (exc) {
echo "Caught: ${exc}"
String recipient = '[email protected]'
mail subject: "${env.JOB_NAME} (${env.BUILD_NUMBER}) failed",
body: "It appears that ${env.BUILD_URL} is failing, somebody should do something about that",
to: recipient,
replyTo: recipient,
from: '[email protected]'
/* Rethrow to fail the Pipeline properly */
throw exc
}
// vim: ft=groovy