Skip to content

Configure

Loading

General

Description
Repackages the EMF artifacts of an existing release as Maven artifacts and optionally publishes them to Maven Central.

<p>
This job uses the CBI aggregator to materialize the p2 artifacts to deploy into a Maven-style repository.
For publishing to OSSRH, some information is missing:
</p>
<ol>
  <li>The POM files are missing some required information.</li>
  <li>The required Javadoc jars need to be generated.</li>
</ol>

<p>
  To complete the POM files, a small utility, <em>pommod</em>, is contained in the releng project in form of a Maven Java project. 
This tool is first built via Maven and is later used to modify the POM files.
</p>

<p>
The missing Javadocs are also automatically produced from the p2 source bundles by this job. 
</p>

<p>
After these preparations for publishing are done:
</p>
<ol>
  <li>The POM files will have been enriched with the required information by the <em>pommod</em> utility.</li>
  <li>The jars including, sources and javadocs, will have been added to the local Maven repository</li>
</ol>

<p>
  Finally, the shell script optionally deploys the jars, their sources, and their javadocs 
  to OSSRH into a <a href="https://oss.sonatype.org/#stagingRepositories">staging repository</a>.
  After uploading, the new staging repository must be closed and then released.
</p>
Inheritance Strategy
User/groupCredentialsJobRunJob Config HistoryPromotionSCM
CreateDeleteManageDomainsUpdateViewBuildCancelConfigureDeleteDiscoverExtendedReadMoveReadWorkspaceDeleteReplayUpdateDeleteEntryPromoteTag
Anonymous
Authenticated Users
?

Loading...

Date and Time Pattern?
N/A

Loading...

?

Loading...

Strategy
Project url?
N/A

Loading...

GitLab Connection
Credential :

Testing...

Loading...

Notification addresses
N/A
?

Loading...

Promotion process
Name
N/A
Visible?
N/A

Loading...

Icon
Label Expression?
If not set, the label of the promoted build will be used.
N/A

Loading...

Criteria
?

Loading...

Groovy Script
N/A
?

Loading...

Additional classpath?
Classpath entry
JAR file path or URL?
N/A

Loading...

Loading...

?

Loading...

Approvers
N/A
Boolean Parameter ?

Loading...

Choice Parameter ?

Loading...

Credentials Parameter ?

Loading...

File Parameter ?

Loading...

Git Parameter ?

Loading...

Multi-line String Parameter
Password Parameter ?

Loading...

Promoted Build Parameter ?

Loading...

Run Parameter ?

Loading...

String Parameter ?

Loading...

?

Loading...

Loading...

?

Loading...

Loading...

Parameter Name
N/A
Parameter Value
N/A
?

Loading...

Job names
N/A

Loading...

?

Loading...

Promotion names
N/A
Promotion environment
?

Loading...

Bindings
Certificate ?

Loading...

Docker client certificate
Git Username and Password
SSH User Private Key ?

Loading...

Secret ZIP file ?

Loading...

Secret file ?

Loading...

Secret text ?

Loading...

Username and password (conjoined) ?

Loading...

Username and password (separated) ?

Loading...

?

Loading...

Managed Files
File?

Loading...

Target?
N/A

Loading...

Variable?
N/A

Loading...

Loading...

Loading...

File?

Loading...

Target?
N/A

Loading...

Variable?
N/A

Loading...

Loading...

Loading...

?

Loading...

Server authentication token
SonarQube authentication token. Mandatory when anonymous access is disabled. Will default to the one defined in the SonarQube installation.
?

Loading...

?

Loading...

Loading...

Credentials
N/A
N/A

Loading...

?

Loading...

Only post commit status of parent matrix job?

Loading...

Commit Status Context?
N/A

Loading...

Commit Status URL?
N/A

Loading...

Commit Status Build Triggered?
N/A

Loading...

Commit Status Build Started?
N/A

Loading...

Add test result one liner
Commit Status Build Result?
Build Result?

Loading...

Message?
N/A

Loading...

Loading...

?

Loading...

Kubernetes server endpoint?
N/A

Loading...

Certificate of certificate authority ?
N/A

Loading...

Credentials
Time-out strategy ?

Loading...

Time-out variable
Set a build timeout environment variable
N/A
Time-out actions?
Abort the build ?

Loading...

Fail the build ?

Loading...

Writing the build description ?

Loading...

Loading...

?

Loading...

Ant Version
JDK
Actions
Execute SonarQube Scanner
Execute Windows batch command ?

Loading...

Execute shell ?

Loading...

Invoke Ant ?

Loading...

Invoke top-level Maven targets ?

Loading...

Provide Configuration files ?

Loading...

Run with timeout
Set build status to "pending" on GitHub commit
SonarScanner for MSBuild - Begin Analysis ?

Loading...

SonarScanner for MSBuild - End Analysis ?

Loading...

Trigger/call builds on other projects
Aggregate downstream test results ?

Loading...

Archive the artifacts ?

Loading...

Build other projects ?

Loading...

Deploy artifacts to Maven repository ?

Loading...

Discover reference build
Mine SCM repository
Publish JUnit test result report ?

Loading...

Publish Javadoc
Record compiler warnings and static analysis results
Record fingerprints of files to track usage ?

Loading...

Git Publisher ?

Loading...

Github Pull Request Merger
SonarQube analysis with Maven ?

Loading...

Accept GitLab merge request on success
Add note with build status on GitLab merge requests ?

Loading...

Add vote for build status on GitLab merge requests
E-mail Notification ?

Loading...

Editable Email Notification ?

Loading...

Keep Build Forever ?

Loading...

Publish build status to GitLab ?

Loading...

Set GitHub commit status (universal) ?

Loading...

Set build status on GitHub commit [deprecated] ?

Loading...

Trigger parameterized build on other projects ?

Loading...

Delete workspace when build is done

Loading...

Promotion process
Name
N/A
Visible?
N/A

Loading...

Icon
Label Expression?
If not set, the label of the promoted build will be used.
N/A

Loading...

Criteria
?

Loading...

Groovy Script
N/A
?

Loading...

Additional classpath?
Classpath entry
JAR file path or URL?
N/A

Loading...

Loading...

?

Loading...

Approvers
N/A
Boolean Parameter ?

Loading...

Choice Parameter ?

Loading...

Credentials Parameter ?

Loading...

File Parameter ?

Loading...

Git Parameter ?

Loading...

Multi-line String Parameter
Password Parameter ?

Loading...

Promoted Build Parameter ?

Loading...

Run Parameter ?

Loading...

String Parameter ?

Loading...

?

Loading...

Loading...

?

Loading...

Loading...

Parameter Name
N/A
Parameter Value
N/A
?

Loading...

Job names
N/A

Loading...

?

Loading...

Promotion names
N/A
Promotion environment
?

Loading...

Bindings
Certificate ?

Loading...

Docker client certificate
Git Username and Password
SSH User Private Key ?

Loading...

Secret ZIP file ?

Loading...

Secret file ?

Loading...

Secret text ?

Loading...

Username and password (conjoined) ?

Loading...

Username and password (separated) ?

Loading...

?

Loading...

Managed Files
File?

Loading...

Target?
N/A

Loading...

Variable?
N/A

Loading...

Loading...

Loading...

File?

Loading...

Target?
N/A

Loading...

Variable?
N/A

Loading...

Loading...

Loading...

?

Loading...

Server authentication token
SonarQube authentication token. Mandatory when anonymous access is disabled. Will default to the one defined in the SonarQube installation.
?

Loading...

?

Loading...

Loading...

Credentials
N/A
N/A

Loading...

?

Loading...

Only post commit status of parent matrix job?

Loading...

Commit Status Context?
N/A

Loading...

Commit Status URL?
N/A

Loading...

Commit Status Build Triggered?
N/A

Loading...

Commit Status Build Started?
N/A

Loading...

Add test result one liner
Commit Status Build Result?
Build Result?

Loading...

Message?
N/A

Loading...

Loading...

?

Loading...

Kubernetes server endpoint?
N/A

Loading...

Certificate of certificate authority ?
N/A

Loading...

Credentials
Time-out strategy ?

Loading...

Time-out variable
Set a build timeout environment variable
N/A
Time-out actions?
Abort the build ?

Loading...

Fail the build ?

Loading...

Writing the build description ?

Loading...

Loading...

?

Loading...

Ant Version
JDK
Actions
Execute SonarQube Scanner
Execute Windows batch command ?

Loading...

Execute shell ?

Loading...

Invoke Ant ?

Loading...

Invoke top-level Maven targets ?

Loading...

Provide Configuration files ?

Loading...

Run with timeout
Set build status to "pending" on GitHub commit
SonarScanner for MSBuild - Begin Analysis ?

Loading...

SonarScanner for MSBuild - End Analysis ?

Loading...

Trigger/call builds on other projects
Aggregate downstream test results ?

Loading...

Archive the artifacts ?

Loading...

Build other projects ?

Loading...

Deploy artifacts to Maven repository ?

Loading...

Discover reference build
Mine SCM repository
Publish JUnit test result report ?

Loading...

Publish Javadoc
Record compiler warnings and static analysis results
Record fingerprints of files to track usage ?

Loading...

Git Publisher ?

Loading...

Github Pull Request Merger
SonarQube analysis with Maven ?

Loading...

Accept GitLab merge request on success
Add note with build status on GitLab merge requests ?

Loading...

Add vote for build status on GitLab merge requests
E-mail Notification ?

Loading...

Editable Email Notification ?

Loading...

Keep Build Forever ?

Loading...

Publish build status to GitLab ?

Loading...

Set GitHub commit status (universal) ?

Loading...

Set build status on GitHub commit [deprecated] ?

Loading...

Trigger parameterized build on other projects ?

Loading...

Delete workspace when build is done

Loading...

Rebuild options:?

Loading...

Loading...

Resources?
N/A

Loading...

Label?
N/A

Loading...

?

Loading...

Groovy Script
N/A
?

Loading...

Additional classpath?
Classpath entry
JAR file path or URL?
N/A

Loading...

Loading...

Reserved resources variable name?
N/A

Loading...

Number of resources to request?
N/A

Loading...

?

Loading...

Choice Parameter ?

Loading...

Name?
EMF_VERSION

Loading...

Choices?
I_BUILD
2.37.0
2.36.0
2.35.0
2.34.0
2.33.0
2.32
2.31
2.30
2.29
2.28
2.27
2.26
2.25
2.24
2.23
2.22
2.21
2.20
2.19
2.18
2.17
2.16
2.15
2.14
2.13
2.12
2.11
2.10
2.9
2.8

Loading...

Description?
EMF release version in format <code>&lt;major&gt;.&lt;minor&gt;</code>

Loading...

Boolean Parameter ?

Loading...

Name?
PUBLISH_REPOSITORY

Loading...

?

Loading...

Description?
Choose whether the build will actually publish the job's resulting Maven artifacts to Maven.

Loading...

Boolean Parameter ?

Loading...

Choice Parameter ?

Loading...

Credentials Parameter ?

Loading...

File Parameter ?

Loading...

Git Parameter ?

Loading...

Multi-line String Parameter
Password Parameter ?

Loading...

Promoted Build Parameter ?

Loading...

Run Parameter ?

Loading...

String Parameter ?

Loading...

?

Loading...

Number of builds?
1

Loading...

Time period?

Loading...

?

Loading...

?

Loading...

JDK
JDK to be used for this project
?

Loading...

Label Expression?
N/A

Loading...

Source Code Management
?

Loading...

Repositories?
Repository URL?
N/A

Loading...

Credentials?

Loading...

Repository URL?
N/A

Loading...

Credentials?

Loading...

Loading...

Branches to build?
Branch Specifier (blank for 'any')?
*/master

Loading...

Branch Specifier (blank for 'any')?
*/master

Loading...

Loading...

Repository browser ?

Loading...

Additional Behaviours
Advanced checkout behaviours
Advanced clone behaviours
Advanced sub-modules behaviours
Build single revision only ?

Loading...

Calculate changelog against a specific branch ?

Loading...

Check out to a sub-directory
Check out to specific local branch ?

Loading...

Clean after checkout ?

Loading...

Clean before checkout ?

Loading...

Create a tag for every build ?

Loading...

Custom SCM name ?

Loading...

Custom user name/e-mail address
Don't trigger a build on commit notifications ?

Loading...

Force polling using workspace ?

Loading...

Git LFS pull after checkout ?

Loading...

Merge before build ?

Loading...

Polling ignores commits from certain users
Polling ignores commits in certain paths ?

Loading...

Polling ignores commits with certain messages
Prune stale remote-tracking branches ?

Loading...

Prune stale tags
Sparse Checkout paths ?

Loading...

Strategy for choosing what to build ?

Loading...

Use commit author in changelog ?

Loading...

Wipe out repository & force clone ?

Loading...

Git
?

Loading...

Repositories?
Repository URL?
N/A

Loading...

Credentials?

Loading...

Repository URL?
https://github.com/eclipse-emf/org.eclipse.emf.git

Loading...

Credentials?

Loading...

Loading...

Branches to build?
Branch Specifier (blank for 'any')?
*/master

Loading...

Branch Specifier (blank for 'any')?
*/master

Loading...

Loading...

Repository browser ?

Loading...

Additional Behaviours
Sparse Checkout paths ?

Loading...

Path
N/A
Path
releng/org.eclipse.emf.releng/publish

Loading...

Advanced checkout behaviours
Advanced clone behaviours
Advanced sub-modules behaviours
Build single revision only ?

Loading...

Calculate changelog against a specific branch ?

Loading...

Check out to a sub-directory
Check out to specific local branch ?

Loading...

Clean after checkout ?

Loading...

Clean before checkout ?

Loading...

Create a tag for every build ?

Loading...

Custom SCM name ?

Loading...

Custom user name/e-mail address
Don't trigger a build on commit notifications ?

Loading...

Force polling using workspace ?

Loading...

Git LFS pull after checkout ?

Loading...

Merge before build ?

Loading...

Polling ignores commits from certain users
Polling ignores commits in certain paths ?

Loading...

Polling ignores commits with certain messages
Prune stale remote-tracking branches ?

Loading...

Prune stale tags
Sparse Checkout paths ?

Loading...

Strategy for choosing what to build ?

Loading...

Use commit author in changelog ?

Loading...

Wipe out repository & force clone ?

Loading...

Git
?

Loading...

Build Triggers
?

Loading...

Authentication Token
N/A Use the following URL to trigger build remotely: JENKINS_URL/job/maven-publish/build?token=TOKEN_NAME or /buildWithParameters?token=TOKEN_NAME
Optionally append &cause=Cause+Text to provide text that will be included in the recorded build cause.
?

Loading...

Projects to watch
N/A
?

Loading...

Schedule?
N/A

Loading...

?

Loading...

Enabled GitLab triggers
Push Events?

Loading...

Push Events in case of branch delete?

Loading...

Opened Merge Request Events?

Loading...

Build only if new commits were pushed to Merge Request?

Loading...

Accepted Merge Request Events?

Loading...

Closed Merge Request Events?

Loading...

Rebuild open Merge Requests?

Loading...

Approved Merge Requests (EE-only)?

Loading...

Comments?

Loading...

Comment (regex) for triggering a build?
Jenkins please retry a build

Loading...

Job Name
N/A
Promotion
GitHub API credentials
Admin list
N/A
Use github hooks for build triggering?

Loading...

?

Loading...

?

Loading...

Schedule?
N/A

Loading...

?

Loading...

Build Environment
?

Loading...

Bindings
Secret file ?

Loading...

Variable?
KEYRING

Loading...

Credentials?
N/A

Loading...

Certificate ?

Loading...

Docker client certificate
Git Username and Password
SSH User Private Key ?

Loading...

Secret ZIP file ?

Loading...

Secret file ?

Loading...

Secret text ?

Loading...

Username and password (conjoined) ?

Loading...

Username and password (separated) ?

Loading...

?

Loading...

Managed Files
File?

Loading...

Target?
N/A

Loading...

Variable?
N/A

Loading...

Loading...

Loading...

File?

Loading...

Target?
N/A

Loading...

Variable?
N/A

Loading...

Loading...

Loading...

?

Loading...

Server authentication token
SonarQube authentication token. Mandatory when anonymous access is disabled. Will default to the one defined in the SonarQube installation.
?

Loading...

?

Loading...

Loading...

Credentials
N/A
N/A

Loading...

?

Loading...

Only post commit status of parent matrix job?

Loading...

Commit Status Context?
N/A

Loading...

Commit Status URL?
N/A

Loading...

Commit Status Build Triggered?
N/A

Loading...

Commit Status Build Started?
N/A

Loading...

Add test result one liner
Commit Status Build Result?
Build Result?

Loading...

Message?
N/A

Loading...

Loading...

?

Loading...

Kubernetes server endpoint?
N/A

Loading...

Certificate of certificate authority ?
N/A

Loading...

Credentials
Time-out strategy ?

Loading...

Time-out variable
Set a build timeout environment variable
N/A
Time-out actions?
Abort the build ?

Loading...

Fail the build ?

Loading...

Writing the build description ?

Loading...

Loading...

?

Loading...

Ant Version
JDK
Build Steps
Invoke top-level Maven targets ?

Loading...

Maven Version
Goals
-B
Invoke top-level Maven targets ?

Loading...

Maven Version
Goals
-B
Execute shell ?

Loading...

Command
gpg --batch --import "${KEYRING}"
for fpr in $(gpg --list-keys --with-colons  | awk -F: '/fpr:/ {print $10}' | sort -u);
do
  echo -e "5\ny\n" |  gpg --batch --command-fd 0 --expert --edit-key $fpr trust;
done

# https://bugs.eclipse.org/bugs/show_bug.cgi?id=573866
mkdir -p ~/.gnupg
cat >> ~/.gnupg/gpg.conf <<EOL
use-agent 
pinentry-mode loopback
EOL
cat >> ~/.gnupg/gpg-agent.conf <<EOL
allow-loopback-pinentry
EOL
echo RELOADAGENT | gpg-connect-agent
Execute shell ?

Loading...

Command
set +e

MVN_CMD=/opt/tools/apache-maven/latest/bin/mvn
MVN_SETTINGS=/home/jenkins/.m2/settings.xml
cat $MVN_SETTINGS
#JAVA_HOME=/opt/tools/java/oracle/jdk-8/latest
echo "$JAVA_HOME"

REPO_PATH=releng/org.eclipse.emf.releng/publish/target/repository/final
REPO_ID=ossrh
if [[ "I_BUILD" == "$EMF_VERSION" ]]
then
  REPO_URL=https://oss.sonatype.org/content/repositories/snapshots/
else
  REPO_URL=https://oss.sonatype.org/service/local/staging/deploy/maven2
fi

$MVN_CMD -version


#####################################
## FUNCTION create_javadoc
#####################################
# $1: source jar path
# $2: javadoc jar path
# $3: javadoc window title
# $4: javadoc doc title
# $5: javadoc header
# $6: javadoc bottom
create_javadoc () {
  pushd $(pwd)
  
  mkdir -p $WORKSPACE/.create_javadoc/src
  cd $WORKSPACE/.create_javadoc/src

  # extract to src dir
  jar -xf $1

  # go one level up to invoke javadoc
  cd ..
  
  echo "Creating Javadoc..."
  echo "  Window Title: $3"
  echo "  Doc Title: $4"
  echo "  Header: $5"
  echo "  Botton: $6"
  
  # produce javadoc from 'src' dir to 'target' dir
  $JAVA_HOME/bin/javadoc -sourcepath src \
    -d target \
    -use \
    -splitIndex \
    -windowtitle "$3" \
    -doctitle "$4" \
    -header "$5" \
    -bottom "$6" \
    -quiet \
    -J-Xmx180m \
    -Xdoclint:none \
    -subpackages org 2>&1 | tail -n 2
  
  # package javadocs
  cd target
  $JAVA_HOME/bin/jar -cf $2 *
  
  popd
  # clean temp dir
  rm -rf $WORKSPACE/.create_javadoc
}

#####################################
## MAIN SCRIPT
#####################################

# Enhance generated POMs by mandatory information (name, SCM, license, developers)
$JAVA_HOME/bin/java \
  -jar releng/org.eclipse.emf.releng/publish/pommod/target/pommod.jar \
  -dir $REPO_PATH/org

find $REPO_PATH/org -name "*.pom" | while read fname; do
	sed "/^<\/project>/d" "$fname" > "$fname".new
    cat >> "$fname".new <<EOL
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
              <goal>sign</goal>
            </goals>
            <configuration>
            <!--
              <keyname>E546E049</keyname>
            -->
              <gpgArguments>
                <arg>--pinentry-mode</arg>
                <arg>loopback</arg>
              </gpgArguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
EOL
    mv "$fname".new "$fname"
done

# loop over the aggregated repository and call the GPG plugin with 'sign-and-deploy-file' goal
#   http://maven.apache.org/plugins/maven-gpg-plugin/sign-and-deploy-file-mojo.html
# append /org to REPO_PATH to avoid match of artifacts.jar/content.jar
# use string replacement to replace the file extension for the .pom file for each jar
find $REPO_PATH/org -name "*.jar" | while read fname; do
  # only take action for the non-source bundles
  if [[ ! "$fname" =~ ".*-sources.jar" ]]; then
    POM_FILE="${fname/%.jar/.pom}"
    SOURCES_JAR="${fname/%.jar/-sources.jar}"
    JAVADOC_JAR="${fname/%.jar/-javadoc.jar}"
    PUBLISH_FILE="${fname/%.jar/.publish}"
    
    if [ -f $SOURCES_JAR -a ! -f $PUBLISH_FILE ]; then
      echo "Artifact already published"
    fi
    
    if [ -f $SOURCES_JAR -a -f $PUBLISH_FILE ]; then
      JAVADOC_TITLE=`sed '1q;d' $PUBLISH_FILE`
      JAVADOC_FOOTER=`sed '2q;d' $PUBLISH_FILE`
      create_javadoc \
        $WORKSPACE/$SOURCES_JAR \
        $WORKSPACE/$JAVADOC_JAR \
        "$JAVADOC_TITLE" \
        "$JAVADOC_TITLE" \
        "$JAVADOC_TITLE" \
        "$JAVADOC_FOOTER"

      if  [[ $PUBLISH_REPOSITORY == "true" ]]
      then
        cat $POM_FILE
        $MVN_CMD -B -DinteractiveMode=false org.apache.maven.plugins:maven-gpg-plugin:3.1.0:sign-and-deploy-file \
          -Dfile=$fname \
          -DpomFile=$POM_FILE \
          -DrepositoryId=$REPO_ID \
          -Durl=$REPO_URL

        $MVN_CMD -B -DinteractiveMode=false org.apache.maven.plugins:maven-gpg-plugin:3.1.0:sign-and-deploy-file \
          -Dfile=$SOURCES_JAR \
          -DpomFile=$POM_FILE \
          -DrepositoryId=$REPO_ID \
          -Durl=$REPO_URL \
          -Dclassifier=sources
      
        $MVN_CMD -B -DinteractiveMode=false org.apache.maven.plugins:maven-gpg-plugin:3.1.0:sign-and-deploy-file \
          -Dfile=$JAVADOC_JAR \
          -DpomFile=$POM_FILE \
          -DrepositoryId=$REPO_ID \
          -Durl=$REPO_URL \
          -Dclassifier=javadoc
      fi
    fi
  fi
done

Conditional step (single) ?

Loading...

Conditional steps (multiple)
Execute SonarQube Scanner
Execute Windows batch command ?

Loading...

Execute shell ?

Loading...

Invoke Ant ?

Loading...

Invoke top-level Maven targets ?

Loading...

Provide Configuration files ?

Loading...

Run with timeout
Set build status to "pending" on GitHub commit
SonarScanner for MSBuild - Begin Analysis ?

Loading...

SonarScanner for MSBuild - End Analysis ?

Loading...

Trigger/call builds on other projects
Post-build Actions
Archive the artifacts ?

Loading...

Files to archive?
releng/org.eclipse.emf.releng/publish/target/repository/final/**

Loading...

Aggregate downstream test results ?

Loading...

Archive the artifacts ?

Loading...

Build other projects ?

Loading...

Discover reference build
Mine SCM repository
Publish JUnit test result report ?

Loading...

Publish Javadoc
Record compiler warnings and static analysis results
Record fingerprints of files to track usage ?

Loading...

Git Publisher ?

Loading...

Github Pull Request Merger
SonarQube analysis with Maven ?

Loading...

Accept GitLab merge request on success
Add note with build status on GitLab merge requests ?

Loading...

Add vote for build status on GitLab merge requests
E-mail Notification ?

Loading...

Editable Email Notification ?

Loading...

Publish build status to GitLab ?

Loading...

Set GitHub commit status (universal) ?

Loading...

Set build status on GitHub commit [deprecated] ?

Loading...

Trigger parameterized build on other projects ?

Loading...

Delete workspace when build is done