The MvnBuild native step performs a Maven project build on files in a Git repository. Optionally, it can also publish build information to Artifactory.
Note
If your maven project is already using the Maven Artifactory plugin, see Setting Up Maven Builds for Pipelines for information about configuring your Maven settings for use in JFrog Pipelines.
Using this step automatically selects Java as the language and bootstraps the runtime environment in the node appropriately.
Important
The MvnBuild
native step uses Java runtime image by default. If runtime image of any other type is configured at pipeline-level for this native step, it will be ignored.
YAML Schema
MvnBuild
pipelines: - name: <string> steps: - name: <string> type: MvnBuild configuration: #inherits all the tags from bash mvnCommand: <string> # optional sourceLocation: <string> # optional resolverSnapshotRepo: <string> # optional resolverReleaseRepo: <string> # optional deployerSnapshotRepo: <string> # optional deployerReleaseRepo: <string> # optional forceXrayScan: <string> # optional failOnScan: <boolean> # default true autoPublishBuildInfo: <string> # optional configFileLocation: <string> # optional configFileName: <string> # optional integrations: - name: <Artifactory integration> # required inputResources: - name: <GitRepo resource> # required - name: <FileSpec resource> # optional outputResources: - name: <BuildInfo resource> # if autoPublishBuildInfo is true execution: onStart: - echo "Preparing for work..." onSuccess: - echo "Job well done!" onFailure: - echo "uh oh, something went wrong" onComplete: #always - echo "Cleaning up some stuff"
Tags
name
An alphanumeric string (underscores are permitted) that identifies the step.
type
Must be MvnBuild
for this step type.
configuration
Specifies all configuration selections for the step's execution environment. This step inherits the Bash/ PowerShell step configuration tags, including these pertinent tags:
Tag | Description of usage | Required/Optional |
---|---|---|
| Must specify an Artifactory Integration | Required |
| Must specify a GitReporesource. The mvn command performs the build on files in the Git repository at May also optionally specify a FileSpec resource that specifies what files to copy to | Required |
| Must specify a BuildInfo resource if | May be required |
In addition, these tags can be defined to support the step's native operation:
Note
All native steps derive from the Bash step. This means that all steps share the same base set of tags from Bash, while native steps have their own additional tags as well that support the step's particular function. So it's important to be familiar with the Bash step definition, since it's the core of the definition of all other steps.
Tag | Description of usage | Required/Optional |
---|---|---|
| Specifies a command line string of options to use with Maven. Default is | Optional |
| Specifies the location of the source files. By default this is set to the root directory of the GitRepo resource. Defaults to the root of the GitRepo. Required if the source files are not in the root directory. | May be required |
| Artifactory repository to resolve snapshot dependencies. If set, NoteDo not use with | Optional |
| Artifactory repository to resolve release dependencies. If set, NoteDo not use with | Optional |
| Snapshot artifacts created by the MvnBuild are uploaded to this Artifactory repository. If set, NoteDo not use with | Optional |
| Release artifacts created by the MvnBuild are uploaded to this Artifactory repository. If set, deployerSnapshot NoteDo not use with | Optional |
| When set to | Optional |
| When set to | Optional |
| When set to | Optional |
| Specifies the name of the JFrog CLI mvn-config file. The NoteThis option should be used only if you have committed this configuration file to your source | Optional |
| Specifies the directory containing the JFrog CLI mvn-config file, relative to the NoteThis option should be used only if you have committed this configuration file to your source | Optional |
execution
Declares collections of shell command sequences to perform for pre- and post-execution phases:
Tag | Description of usage | Required/Optional |
---|---|---|
| Commands to execute in advance of the native operation | Optional |
| Commands to execute on successful completion | Optional |
| Commands to execute on failed completion | Optional |
| Commands to execute on any completion | Optional |
The actions performed for the onExecute
phase are inherent to this step type and may not be overridden.
Examples
The following examples show a few ways in which a MvnBuild step can be configured.
Full Pipeline Example
This example requires an Artifactory Integration and a GitHub Integration.
The Pipelines DSL for this example is available in this repository in the JFrog GitHub account.
For a full tutorial, see Pipeline Example: Maven Build.
# This config file is templatized so that it can be easily customized. Values can be provided with a values.yml file. template: true # required for local templates valuesFilePath: ./values.yml resources: - name: mvn_repo type: GitRepo configuration: path: {{ .Values.repoPath }} gitProvider: {{ .Values.gitProvider }} - name: mvn_build_info type: BuildInfo configuration: sourceArtifactory: {{ .Values.artifactory }} pipelines: - name: demo_maven steps: - name: mvn_build_step type: MvnBuild configuration: deployerSnapshotRepo: {{ .Values.deployerRepo }} deployerReleaseRepo: {{ .Values.deployerRepo }} inputResources: - name: mvn_repo integrations: - name: {{ .Values.artifactory }} - name: publish_build type: PublishBuildInfo configuration: forceXrayScan: false inputSteps: - name: mvn_build_step outputResources: - name: mvn_build_info
Basic Example using Default Values
The most basic form of MvnBuild. Uses all default values. This step navigates to the root of the repo specified in the inputResources
array, and performs an mvn clean install
. It does not publish a build or request an Xray scan.
MvnBuild
pipelines: - name: MyMavenPipeline steps: - name: MavenWithArtifactory type: MvnBuild configuration: integrations: - name: art inputResources: - name: mvn_repo
Using Artifactory as Resolver and Deployer
This example uses Artifactory as a resolver and a deployer, so that your project's dependencies are pulled from the specified repo, and the resulting artifacts are pushed back up to Artifactory. It also publishes build info to Artifactory and requests an Xray scan.
MvnBuild
pipelines: - name: MyMavenPipeline steps: - name: MavenWithAll type: MvnBuild configuration: integrations: - name: art inputResources: - name: mvn_repo outputResources: - name: mvn_build_info mvnCommand: clean install test sourceLocation: mvnproject resolverSnapshotRepo: snapshots-remote-maven resolverReleaseRepo: releases-remote-maven deployerSnapshotRepo: snapshots-local-maven deployerReleaseRepo: releases-local-maven forceXrayScan: true failOnScan: true autoPublishBuildInfo: true
Using a Config File
This example uses a committed config file to accomplish the same thing that example 2 does.
MvnBuild
pipelines: - name: MyMavenPipeline steps: - name: MvnWithConfig type: MvnBuild configuration: integrations: - name: art inputResources: - name: mvn_repo outputResources: - name: mvn_build_info mvnCommand: clean install test sourceLocation: mvnproject configFileLocation: "." configFileName: mvn-art-config forceXrayScan: true failOnScan: true autoPublishBuildInfo: true
How it Works
When you use the MvnBuild native step in a pipeline, it performs the following actions in the background:
MvnBuildCommands
jfrog rt config # configures JFrog CLI with the integration listed in the yaml jfrog rt mvn-config # if configFileName and configFileLocation are not set in yaml jfrog rt mvn $mvnCommand # the main maven build command add_run_variables # saves some information in run state for future steps to reference jfrog rt build-collect-env # collects build environment, preparing for build publish jfrog rt build-publish # only if autoPublishBuildInfo is true write_output # updates the buildinfo resource, if present jfrog rt build-scan # if forceXrayScan is true add_run_files # adds BuildInfo to run state