blob: bb90b4e35351ce9d54e674b9710ac68942685e90 [file] [log] [blame]
@NonCPS
def getSlackMessage() {
def message = "Build <${env.BUILD_URL}|#${env.BUILD_NUMBER}> of <https://git.eclipse.org/c/hawk/hawk.git/log/?h=${env.BRANCH_NAME}|${currentBuild.fullProjectName}> "
message += (currentBuild.currentResult == "SUCCESS" ? "passed" : "failed") + " in ${currentBuild.durationString}\n\n"
for (changeSet in currentBuild.changeSets) {
for (entry in changeSet.items) {
message += "`${entry.commitId.take(7)}` ${entry.msg} - ${entry.author}\n"
}
}
return message
}
pipeline {
agent {
kubernetes {
yaml """
apiVersion: v1
kind: Pod
spec:
containers:
- name: maven
image: maven:3.6.3-jdk-8
command:
- cat
tty: true
resources:
limits:
memory: "4Gi"
cpu: "1"
requests:
memory: "4Gi"
cpu: "1"
env:
- name: "MAVEN_OPTS"
value: "-Duser.home=/home/jenkins -Xmx512m -Xms256m"
- name: "HOME"
value: "/home/jenkins"
volumeMounts:
- name: jenkins-home
mountPath: /home/jenkins
readOnly: false
- name: settings-xml
mountPath: /home/jenkins/.m2/settings.xml
subPath: settings.xml
readOnly: true
- name: settings-security-xml
mountPath: /home/jenkins/.m2/settings-security.xml
subPath: settings-security.xml
readOnly: true
- name: toolchains-xml
mountPath: /home/jenkins/.m2/toolchains.xml
subPath: toolchains.xml
readOnly: true
- name: m2-repo
mountPath: /home/jenkins/.m2/repository
- name: volume-known-hosts
mountPath: /home/jenkins/.ssh
- name: jnlp
volumeMounts:
- name: volume-known-hosts
mountPath: /home/jenkins/.ssh
volumes:
- name: jenkins-home
emptyDir:
medium: ""
- name: settings-xml
secret:
secretName: m2-secret-dir
items:
- key: settings.xml
path: settings.xml
- name: settings-security-xml
secret:
secretName: m2-secret-dir
items:
- key: settings-security.xml
path: settings-security.xml
- name: m2-repo
emptyDir: {}
- name: toolchains-xml
configMap:
name: m2-dir
items:
- key: toolchains.xml
path: toolchains.xml
- name: volume-known-hosts
configMap:
name: known-hosts
"""
}
}
stages {
stage('Core without tests') {
when {
anyOf {
changeset 'core/plugins/**'
changeset 'core/tests/**'
changeset 'core/releng/org.eclipse.hawk.targetplatform/**'
changeset 'greycat/**'
changeset 'server/**'
changeset 'pom.xml'
changeset 'pom-plain.xml'
expression { return currentBuild.number == 1 }
triggeredBy 'UserIdCause'
}
}
steps {
container('maven') {
sh 'cd core && mvn -B --quiet clean install -DskipTests --toolchains jenkins-toolchains.xml'
}
}
}
stage('Greycat without tests') {
when {
anyOf {
changeset 'core/plugins/**'
changeset 'core/tests/**'
changeset 'core/releng/org.eclipse.hawk.targetplatform/**'
changeset 'greycat/**'
changeset 'server/**'
changeset 'pom.xml'
changeset 'pom-plain.xml'
expression { return currentBuild.number == 1 }
triggeredBy 'UserIdCause'
}
}
steps {
container('maven') {
sh 'cd greycat && mvn -B --quiet clean install -DskipTests --toolchains ../core/jenkins-toolchains.xml'
}
}
}
stage('Tycho') {
when {
anyOf {
changeset 'core/plugins/**'
changeset 'core/tests/**'
changeset 'core/releng/org.eclipse.hawk.targetplatform/**'
changeset 'greycat/**'
changeset 'server/**'
changeset 'pom.xml'
changeset 'pom-plain.xml'
expression { return currentBuild.number == 1 }
triggeredBy 'UserIdCause'
}
}
steps {
container('maven') {
sh 'cd server && mvn -B --quiet clean install -P signjars -DfailIfNoTests=false --toolchains ../core/jenkins-toolchains.xml'
}
}
post { always { junit '**/TEST-*.xml' } }
}
stage('Downloads') {
when {
allOf {
branch 'master'
anyOf {
changeset 'core/plugins/**'
changeset 'core/tests/**'
changeset 'core/releng/org.eclipse.hawk.targetplatform/**'
changeset 'greycat/**'
changeset 'server/**'
changeset 'pom.xml'
changeset 'pom-plain.xml'
expression { return currentBuild.number == 1 }
triggeredBy 'UserIdCause'
}
}
}
steps {
lock('download-area') {
sshagent (['projects-storage.eclipse.org-bot-ssh']) {
sh 'server/deploy-downloads.sh'
}
}
}
}
}
post {
success{
slackSend (channel: '#ci-notifications', botUser: true, color: '#00FF00', message: getSlackMessage())
}
failure {
slackSend (channel: '#ci-notifications', botUser: true, color: '#FF0000', message: getSlackMessage())
}
changed {
emailext(body: "${currentBuild.currentResult}: Job ${env.JOB_NAME} build ${env.BUILD_NUMBER}\n More info at: ${env.BUILD_URL}",
recipientProviders: [[
$class: "DevelopersRecipientProvider",
$class: "RequesterRecipientProvider"
]],
subject: "Jenkins Build ${currentBuild.currentResult}: Job ${env.JOB_NAME}")
}
}
}