Skip to content

Commit

Permalink
AMBARI-26097: Implement Git Version Control for Ambari Jenkinsfile (a…
Browse files Browse the repository at this point in the history
…pache#3796)

* AMBARI-26097: Implement Git Version Control for Ambari Jenkinsfile

---------

Co-authored-by: jialiang <[email protected]>
  • Loading branch information
JiaLiangC and JiaLiangC authored Jul 29, 2024
1 parent 811a7bd commit 33cc0b0
Showing 1 changed file with 158 additions and 0 deletions.
158 changes: 158 additions & 0 deletions Jenkinsfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/**
Test modules and groups.
Use command "mvn -fae -Dexec.executable='echo' -Dexec.args='${project.artifactId}' exec:exec -q" to revisit
Ambari WebUI -> ambari-web, ambari-admin
Ambari Agent -> ambari-agent, ambari-utility
Ambari Server -> ambari-server, ambari-views
Ambari Metrics -> (cd) -> ambari-metrics (only build, no checks)
ServiceAdvisor -> ambari-serviceadvisor
Ambari LogSearch -> (cd) -> ambari-logsearch
Ambari Infra -> (cd) -> ambari-infra
Ambari Server JTest Profiles: FastTests, SlowTests, NonFastTests, AlertTests, AmbariUpgradeTests, BlueprintTests, KerberosTests, MetricsTests, StackUpgradeTests
Jenkins Plugins required:
- JIRA Steps, https://plugins.jenkins.io/jira-steps/
- Jenkins Multibranch pipeline
**/
pipeline {
agent {
node {
label 'Hadoop'
}
}

tools {
maven 'maven_3_latest'
jdk 'jdk_1.8_latest'
}

environment {
TEMP='/tmp'
TEMPDIR='/tmp'
TMP='/tmp'
TMPDIR='/tmp'
}

stages {
stage('Pre-Build Deps') {
parallel{
stage('JIRA Integration') {
steps {
publishPRLink env.CHANGE_ID, env.CHANGE_URL, env.CHANGE_TITLE
}
}
stage('Ambari Metrics Build (deps)') {
steps {
script{
def dirExists = fileExists 'ambari-metrics'
if (dirExists) {
echo "Ambari-Metrics is here!"
dir('ambari-metrics') {
sh 'mvn -T 3C install -DskipSurefireTests -DskipPythonTests -Dmaven.test.failure.ignore -DskipTests -Dfindbugs.skip -Drat.skip -Dmaven.artifact.threads=10 -X'
}
} else {
echo "Ignoring ambari-metrics, as no such directory found"
}
}
}
}
stage('Ambari Service Advisor') {
steps {
sh 'mvn -T 3C -am install -pl ambari-serviceadvisor -DskipSurefireTests -DskipPythonTests -Dmaven.test.failure.ignore -DskipTests -Dfindbugs.skip -Drat.skip -Dmaven.artifact.threads=10'
}
}
}
}

// Rat & Checkstyle is not really like multi-threading due to high possiblity of false possitives.
stage('RAT') {
steps{
sh 'mvn org.apache.rat:apache-rat-plugin:check -Dmaven.artifact.threads=10'
}
}

stage('Parallel Unit Tests') {
parallel {
stage('Ambari WebUI Tests') {
steps {
withEnv(['OPENSSL_CONF=/dev/null']) {
sh 'lsb_release -a'
sh 'mvn -T 2C -am test -pl ambari-web,ambari-admin -Dmaven.artifact.threads=10 -Drat.skip'

}
}
}

stage('Ambari Agent Tests') {
steps {
sh 'pip3 install distro'
sh 'mvn -Dmaven.test.failure.ignore=true -am test -pl ambari-agent -Dmaven.artifact.threads=10 -Drat.skip'
}
}

stage('Ambari Server PyTests') {
steps {
sh 'mvn -am test -pl ambari-server -DskipSurefireTests -Dmaven.test.failure.ignore -Dmaven.artifact.threads=10 -Drat.skip -Dcheckstyle.skip'
}
}
}
}
stage('Ambari Server JTests') {
steps {
sh 'mvn -am test -pl ambari-server -DskipPythonTests -Dmaven.test.failure.ignore -Dmaven.artifact.threads=10 -Drat.skip'
}
}
}
}

@NonCPS
def publishPRLink(change_id, change_url, change_title) {
println "Change id: $change_id, title: $change_title, url: $change_url"
def jira_num = change_title =~ /(?i)^\[*(?<JIRA>AMBARI\-\d+)/

jira_num = jira_num.find() ? jira_num.group("JIRA") : ""
println "JIRA ID: $jira_num"

if (jira_num) {
// tip: https://developer.atlassian.com/server/jira/platform/jira-rest-api-for-remote-issue-links/
// globalId is required for JIRA to distinguish 2 same links and do not stack new objects
def remoteLink = [
globalId : "system=$change_url",
object : [url : change_url,
title: "GitHub PR#$change_id",
icon : [
url16x16: "https://github.com/favicon.ico",
title : "GitHub PR#$change_id"
]
]
]
jiraNewIssueRemoteLink idOrKey: jira_num, remoteLink: remoteLink, site: "JIRA"
} else {
println """
======failed to add link to jira
Ooops, no jira id found :(
============================="""
pullRequest.comment("Pull request summary '${change_title}' doesn't contain JIRA Number in format 'AMBARI-xxxxx' at the beginning, please, create the JIRA issue and update pull request summary")
}
}

0 comments on commit 33cc0b0

Please sign in to comment.