Spring Cloud Release Tools
-Spring Cloud projects reuse the same pattern of building and deploying the applications. That’s -why this tool makes it easy to automate the release / dependency update process of our applications.
-What does it do?
-Single project
-For a single project
--
-
-
-
Clones the Spring Cloud Release project and picks all versions (Boot + Cloud projects)
-
- -
-
Modifies the project versions with values from a BOM (e.g. for Spring Cloud it’s Spring Cloud Release)
----
-
-
-
throws an exception when we bump versions to release and there’s a SNAPSHOT version referenced in the POM
-
-
- -
-
-
-
Performs the build and checks if the
-docsmodules have properly created the documentation---
-
-
-
throws an exception when in the
-docsmodule there’s an unresolved tag in any HTML file
-
- -
-
-
-
Commits changed poms (ONLY FOR NON-SNAPSHOT VERSIONS)
-
- -
-
Creates a tag for the release / milestone (ONLY FOR NON-SNAPSHOT VERSIONS)
-
- -
-
Runs the deployment of the artifacts
-
- -
-
Publishes the docs (to
-spring-cloud-staticfor non-snapshots, togh-pagesfor snapshots)
- -
-
Reverts back to snapshots, bumps the version by a patch (
-1.0.1.RELEASE→1.0.2.BUILD-SNAPSHOT) (ONLY FOR RELEASE VERSIONS)
- -
-
Closes the milestone on Github (e.g.
-v1.0.1.RELEASE) (ONLY FOR NON-SNAPSHOT VERSIONS)
-
| - - | --Starting with version that does Sagan integration, you MUST pass the OAuth token, -otherwise the application will fail to start - | -
After project release
--
-
-
-
Generates an email template under
-target/email.txt(ONLY FOR NON-SNAPSHOT VERSIONS)
- -
-
Generates a blog template under
-target/blog.md(ONLY FOR NON-SNAPSHOT VERSIONS)
- -
-
Generates a tweet template under
-target/tweet.txt(ONLY FOR NON-SNAPSHOT VERSIONS)
- -
-
Generates a release notes template under
-target/notes.md(ONLY FOR NON-SNAPSHOT VERSIONS)
- -
-
Updates project information in Sagan (https://spring.io) (ONLY FOR SNAPSHOT / RELEASE VERSIONS)
-
- -
-
For
-GA/SRrelease will create an issue in Spring Guides under https://github.com/spring-guides/getting-started-guides/issues/
- -
-
For
-GA/SRrelease will update the links under https://github.com/spring-cloud/spring-cloud-static/tree/gh-pages/current
- -
-
Will update the release train project page (for Spring Cloud it will be
-https://github.com/spring-projects/spring-cloud)
-
Meta-release
--
-
-
-
Uses the fixed versions to clone and check out each project (e.g.
-spring-cloud-sleuth: 2.1.0.RELEASE)
- -
-
From the version analyzes the branch and checks it out. E.g.
----
-
-
-
for
-spring-cloud-release’s `Finchley.RELEASEversion will resolve eitherFinchleybranch or will fallback tomasterif there’s noFinchleybranch.
- -
-
for
-spring-cloud-sleuth’s `2.1.0.RELEASEversion will resolve2.1.xbranch
-
- -
-
-
-
Performs the release tasks per each project
-
- -
-
Performs the post release tasks at the end of the release
-
- -
-
Will update and run smoke test samples (for Spring Cloud it will be
-https://github.com/spring-cloud/spring-cloud-core-tests)
- -
-
Will clone provided test samples and will update all versions to the latest ones
-
- -
-
Will clone the release train wiki and update it with the latest release versions (for Spring Cloud it will be
-https://github.com/spring-projects/spring-cloud.wiki.git)
-
| - - | -
-For the meta-releaser to work we assume that the path to the
-custom configuration file for each project is always config/releaser.yml.
- |
-
What should I do first?
-Members of the Spring Cloud Team typically use this tool as follows. They first -clone the releaser locally and build the jar manually
-$ git clone git@github.com:spring-cloud/spring-cloud-release-tools.git
-$ cd spring-cloud-release-tools
-$ ./mvnw clean install
-| - - | -
-You must set the value of the OAuth token. You can do it either via
-the command line --releaser.git.oauth-token=… or put it as an env variable in .bashrc
-or .zshrc e.g. export RELEASER_GIT_OAUTH_TOKEN=…
- |
-
How to run it (interactive mode)
-Go to your project (e.g. Spring Cloud Sleuth)
-$ git clone git@github.com:spring-cloud/spring-cloud-sleuth.git
-$ cd spring-cloud-sleuth
-$ # example of running the releaser agains Dalston.SR1 tag with 1.0.0.BUILD-SNAPSHOT version of the releaser
-$ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --releaser.pom.branch=vDalston.SR1 --spring.config.name=releaser
-The application will start running from your working directory. Running this code
-follows the convention that you have the OAuth token environment variable set. It also assumes
-that you might have some custom configuration in config/releaser.yml file. This setting is optional - if
-you don’t have that file, nothing will happen.
| - - | -
-It is important that you clone the repository you are going to release using SSH in order for the
-releaser to be able to push tags and commit changes automatically.
- |
-
You will see text similar to this one
-=== WHAT DO YOU WANT TO DO? ===
+Page Redirection
-0) Perform a full release of this project without interruptions
-1) Perform a full release of this project in a verbose mode (you'll be asked about skipping steps)
-2) Update poms with versions from Spring Cloud Release
-3) Build the project
-4) Commit, tag and push the tag
-5) Deploy the artifacts
-6) Publish the docs
-7) Go back to snapshots and bump originalVersion by patch
-8) Push the commits
-9) Close the milestone at Github
-10) Create email / blog / tweet etc. templates
-
-You can pick a range of options by using the hyphen - e.g. '2-4' will execute jobs [2,3,4]
-You can execute all tasks starting from a job by using a hyphen and providing only one number - e.g. '8-' will execute jobs [8,9,10]
-You can execute given tasks by providing a comma separated list of tasks - e.g. '3,7,8' will execute jobs [3,7,8]
-
-You can press 'q' to quit
-Just pick a number and continue! Pick either a full release or single steps. You can also pick -ranges or multiple steps. You can also provide the range only with the starting step -- that you will execute all steps starting from the given one.
-| - - | --Read before picking a number cause it might have changed between tool releases ;) - | -
How to run it (automatic mode)
-Go to your project (e.g. Spring Cloud Sleuth) and execute the application with -h or --help
-flag.
$ git clone git@github.com:spring-cloud/spring-cloud-sleuth.git
-$ cd spring-cloud-sleuth
-$ # example of running the releaser agains Dalston.SR1 tag with 1.0.0.BUILD-SNAPSHOT version of the releaser
-$ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --releaser.pom.branch=vDalston.SR1 --spring.config.name=releaser -h
-You will see a help screen looking like more or less like this
-Here you can find the list of tasks in order
-
-[release,releaseVerbose,metaRelease,postRelease,updatePoms,build,commit,deploy,docs,snapshots,push,closeMilestone,updateSagan,createTemplates,updateGuides,updateDocumentation]
-
-
-Option Description
------- -----------
--a, --start-from <String> Starts all release task starting from the
- given task. Requires passing the task
- name (either one letter or the full
- name)
--b, --build [String] Build the project
--c, --commit [String] Commit, tag and push the tag
--d, --deploy [String] Deploy the artifacts
--f, --full-release [Boolean] Do you want to do the full release of a
- single project? (default: false)
--g, --updateSagan [String] Updating Sagan with release info
--h, --help [String]
--i, --interactive <Boolean> Do you want to set the properties from
- the command line of a single project?
- (default: true)
--m, --closeMilestone [String] Close the milestone at Github
--o, --docs [String] Publish the docs
--p, --push [String] Push the commits
--r, --range <String> Runs release tasks from the given range.
- Requires passing the task names with a
- hyphen. The first task is inclusive,
- the second inclusive. E.g. 's-m' would
- mean running 'snapshot', 'push' and
- 'milestone' tasks
--s, --snapshots [String] Go back to snapshots and bump
- originalVersion by patch
--t, --createTemplates [String] Create email / blog / tweet etc. templates
---task-names, --tn <String> Starts all release task for the given
- task names
--u, --updatePoms [String] Update poms with versions from Spring
- Cloud Release
---ud, --updateDocumentation [String] Updating documentation repository
---ug, --updateGuides [String] Updating Spring Guides
--x, --meta-release <Boolean> Do you want to do the meta release?
- (default: false)
-
-Examples of usage:
-
-Run 'build' & 'commit' & 'deploy'
-java -jar jar.jar -b -c -d
-
-Start from 'push'
-java -jar releaser.jar -a push
-
-Range 'docs' -> 'push'
-java -jar releaser.jar -r o-p
-The Releaser can use two sets of options. The configuration options like releaser.pom.branch
-and the task switches. For the tasks you can use either the full names or short switches. For example
- providing range of tasks via switches o-p is equivalent to full name docs-push.
A couple of examples:
-$ git clone git@github.com:spring-cloud/spring-cloud-sleuth.git
-$ cd spring-cloud-sleuth
-$ # example of running the releaser agains Dalston.SR1 tag with 1.0.0.BUILD-SNAPSHOT version of the releaser
-$ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --releaser.pom.branch=vDalston.SR1 --spring.config.name=releaser --full-release
-$ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --releaser.pom.branch=vDalston.SR1 --spring.config.name=releaser --full-release --interactive=false
-$ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --releaser.pom.branch=vDalston.SR1 --spring.config.name=releaser -u -m -t
-$ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --releaser.pom.branch=vDalston.SR1 --spring.config.name=releaser -a push -i=false
-$ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --releaser.pom.branch=vDalston.SR1 --spring.config.name=releaser -r d-p -i=false
-$ java -jar ~/repo/spring-cloud-release-tools/spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --releaser.pom.branch=vDalston.SR1 --spring.config.name=releaser --closeMilestone -i=false
-How to run meta-release (automatic-mode)
-All you have to do is run the jar with the releaser and pass the
--x=true option to turn on meta-release and a list of fixed versions
-in the `--"releaser.fixed-versions[project-name]=project-version" format
$ java -jar spring-cloud-release-tools-spring/target/spring-cloud-release-tools-spring-1.0.0.BUILD-SNAPSHOT.jar --spring.config.name=releaser -x=true --"releaser.fixed-versions[spring-cloud-sleuth]=2.0.1.BUILD-SNAPSHOT"
-| - - | -
-For the meta release the startFrom or taskNames take into consideration
-the project names, not task names. E.g. you can start from spring-cloud-netflix project,
-or build only tasks with names spring-cloud-build,spring-cloud-sleuth.
- |
-
Project options
--
-
-
-
-releaser.fixed-versions- A String to String mapping of manually set versions. E.g."spring-cloud-cli" → "1.0.0.RELEASE"will set -thespring-cloud-cli.versionto1.0.0.RELEASEregardless of what was set inspring-cloud-releaseproject. Example--releaser.fixed-versions[spring-cloud-cli]=1.0.0.RELEASE. -Use these properties to provide versions for the meta release.
- -
-
-releaser.meta-release.enabled- You have to turn it on to enable a meta release. Defaults tofalse
- -
-
-releaser.meta-release.git-org-url- The URL of the Git organization. We’ll append each project’s name to it. -Defaults tohttps://github.com/spring-cloud
- -
-
-releaser.meta-release.projects-to-skip- List of projects that we should not clone and release. Spring Cloud release -train depends on projects that got already released. We default this list to[spring-boot, spring-cloud-stream, spring-cloud-task].
- -
-
-releaser.git.update-documentation-repo- Iftruethen will update documentation repository with thecurrentURL. Defaults totrue.
- -
-
-releaser.git.spring-project-url- URL to the documentation Git repository. Defaults tohttps://github.com/spring-projects/spring-cloud.
- -
-
-releaser.git.spring-project-branch- Branch to check out for the documentation project. Defaults togh-pages.
- -
-
-releaser.git.update-spring-project- Iftruethen will update Project Sagan with the current release train values. Defaults totrue.
- -
-
-releaser.git.test-samples-project-url- URL to the test samples to be checked against the given release train. Defaults tohttps://github.com/spring-cloud/spring-cloud-core-tests.
- -
-
-releaser.git.test-samples-project-branch- Branch to check out for test samples. Defaults tomaster.
- -
-
-releaser.git.release-train-wiki-url- URL to the project’s release train wiki page. Defaults tohttps://github.com/spring-projects/spring-cloud.wiki.git.
- -
-
-releaser.git.update-release-train-wiki- Iftruethen will update the release train wiki page with the current release train values. Defaults totrue.
- -
-
-releaser.git.run-updated-samples- Iftruethen will update samples and run the the build. Defaults totrue.
- -
-
-releaser.git.all-test-samples-urls- URLs to the test samples to be cloned and updated with proper snapshot versions. -E.g."--releaser.git.all-test-samples-urls[spring-cloud-sleuth]=https://github.com/spring-cloud-samples/sleuth-issues/,https://github.com/spring-cloud-samples/sleuth-documentation-apps/". -Defaults to Sleuth and Contract samples.
- -
-
-releaser.git.update-all-test-samples- Iftruethen will update samples with bumped snapshots after release. Defaults totrue.
- -
-
-releaser.git.release-train-docs-url- URL to the release train documentation. Defaults tohttps://github.com/spring-cloud-sample/scripts.
- -
-
-releaser.git.release-train-docs-branch- Branch to check out for release train documentation. Defaults tomaster.
- -
-
-releaser.git.update-release-train-docs- Iftruethen will update the release train documentation project and run the generation. Defaults totrue.
- -
-
-releaser.git.update-spring-guides- Iftruethen will update Spring Guides with the current release train. Defaults totrue.
-
The following properties are used for both meta release and a release of an individual module.
--
-
-
-
-releaser.post-release-tasks-only- If set totruewill run only post release tasks. Defaults tofalse.
- -
-
-releaser.meta-release.release-train-project-name- Name of the project that represents the BOM of the release train. Defaults tospring-cloud-release.
- -
-
-releaser.meta-release.release-train-dependency-names- Names of the projects that should be updated with the version of the release train. Defaults to[spring-cloud, spring-cloud-dependencies, spring-cloud-starter].
- -
-
-releaser.git.fetch-versions-from-git- Iftruethen should fill the map of versions from Git. Iffalsethen picks fixed versions.
- -
-
-releaser.git.clone-destination-dir- Where should the Spring Cloud Release repo get cloned to. If null defaults to a temporary directory.
- -
-
-releaser.git.release-train-bom-url- URL to a project containing a BOM. Defaults to Spring Cloud Release Git repository:https://github.com/spring-cloud/spring-cloud-release.
- -
-
-releaser.git.documentation-url- URL to the documentation Git repository. Defaults tohttps://github.com/spring-cloud/spring-cloud-static.
- -
-
-releaser.git.documentation-branch- Branch to check out for the documentation project. Defaults togh-pages.
- -
-
-releaser.sagan.update-sagan- Iftruethen will update project sagan with information about this project. Defaults totrue.
- -
-
-releaser.sagan.docs-adocs-file- Folder with asciidoctor files for docs. Defaults todocs/src/main/asciidoc.
- -
-
-releaser.sagan.index-section-file-name- Name of the ascii doc file with core part of this project’s Sagan project page. Will search underreleaser.sagan.docs-adocs-filefolder. Defaults tosagan-index.adoc.
- -
-
-releaser.sagan.boot-section-file-name- Name of the ascii doc file with boot part of this project’s Sagan project page. Will search underreleaser.sagan.docs-adocs-filefolder. Defaults tosagan-boot.adoc.
- -
-
-releaser.git.oauth-token- GitHub OAuth token to be used to interact with GitHub repo.
- -
-
-releaser.git.username- Optional Git username. If not passed keys will be used for authentication.
- -
-
-releaser.git.password- Optional Git password. If not passed keys will be used for authentication.
- -
-
-releaser.git.number-of-checked-milestones- In order not to iterate endlessly over milestones we introduce a threshold of milestones that -we will go through to find the matching milestone. Defaults to10.
- -
-
-releaser.maven.build-command- Command to be executed to build the project. Defaults to./mvnw clean install -Pdocs.
- -
-
-releaser.maven.deploy-command- Command to be executed to deploy a built project". Defaults to./mvnw deploy -DskipTests -Pfast.
- -
-
-releaser.maven.publish-docs-commands- Command to be executed to deploy a built project. If present{{version}}will be replaced by the proper version. -Defaults to the standard Spring Cloud wget and execution of ghpages.
- -
-
-releaser.maven.system-properties- Additional system properties that should be passed to any commands. If present{{systemProps}}will be replaced by the contents of this property.
- -
-
-releaser.maven.wait-time-in-minutes- Max wait time in minutes for the process to finish. Defaults to20.
- -
-
-releaser.gradle.gradle-props-substitution- a map containing akeywhich is a property key insidegradle.propertiesand avalueof -a project name. E.g. ingradle.propertiesyou havefoo=1.0.0.BUILD-SNAPSHOTand you would likespring-cloud-contractversion to -be set there. Just provide a mapping for thegradle-props-substitionlooking like thisfoo=spring-cloud-contractand the result -(e.g for sc-contract version2.0.0.RELEASE) will be an updatedgradle.propertieswith entryfoo=2.0.0.RELEASE.
- -
-
-releaser.pom.branch- Which branch of Spring Cloud Release should be checked out. Defaults tomaster.
- -
-
-releaser.pom.pom-with-boot-starter-parent- What is the location of thepom.xmlthat contains thespring-boot-starter-parentas its parent pom. Defaults tospring-cloud-starter-parent/pom.xml.
- -
-
-releaser.pom.this-train-bom- What is the location of thepom.xmlthat contains all the versions for the release train. Defaults tospring-cloud-dependencies/pom.xml.
- -
-
-releaser.pom.bom-version-pattern- Regular expression that will match the versions of projects in the BOM pom.xml. Defaults to^(spring-cloud-.*)\.version$.
- -
-
-releaser.pom.ignored-pom-regex- List of regular expressions of ignored poms. Defaults to test projects and samples. -Example:"--releaser.pom.ignored-pom-regex=".*\\.git/.*$,.{asterisk}spring-cloud-contract-maven-plugin/src/test/projects/.*$,.*spring-cloud-contract-maven-plugin/target/.*$,.*samples/standalone/[a-z]+/.*$".
- -
-
-releaser.working-dir- By default Releaser assumes running the program from the current working directory.
- -
-
-releaser.template.template-folder- Tells which subfolder with templates to pick for blog, email etc. generation. Defaults tocloud.
- -
-
-releaser.versions.all-versions-file-url- Url to a file containing all the versions. Defaults to YAML from start.spring.io.
- -
-
-releaser.versions.bom-name- Name in the YAML from initilizr for BOM mappings. Defaults tospring-cloud.
-
| - - | -
-You can pass the options either via system properties or via application arguments.
-Example for system properties: java -Dreleaser.pom.branch=Camden.SR6 -jar target/spring-cloud-release-tools-spring-1.0.0.M1.jar
-Example for application arguments: java -jar target/spring-cloud-release-tools-spring-1.0.0.M1.jar --releaser.pom.branch=Camden.SR6
- |
-
| - - | -
-For the GA release to be successful, it’s important that if the build / deploy command
- run a script (e.g. scripts/foo.sh) then inside foo.sh if you call a Maven build ./mvnw clean install
- then remember to pass all arguments of the script there too. E.g. ./mvnw clean install ${@}. That’s because
- the releaser will pass any system properties to the build / deploy command, such as system properties
- with keys and we need them to be passed inside the command executed by the releaser.
- |
-
Examples
-Keeping configuration in the project
-If your project has some custom configuration (e.g. Spring Cloud Contract needs a script to be executed
-to build the project and properly merge the docs) then you can put a file named e.g. releaser.yml under config
-folder and run your application like this:
$ wget https://repo.spring.io/libs-milestone/org/springframework/cloud/internal/spring-cloud-release-tools-spring/1.0.0.M1/spring-cloud-release-tools-spring-1.0.0.M1.jar -O ../spring-cloud-release-tools-spring-1.0.0.M1.jar
-$ java -jar target/spring-cloud-release-tools-spring-1.0.0.M1.jar --spring.config.name=releaser
-| - - | -
-Notice that we’re downloading the jar to a parent folder, not to target. That’s because target get cleaned
-during the build process
- |
-
| - - | -
-For the meta-releaser to work we assume that the path to the
-configuration file is always config/releaser.yml.
- |
-
Specifying A Branch
-By deafult the releaser will default to using the master branch of spring-cloud-release.
-If you would like to use another branch you can specify it using the releaser.pom.branch property.
$ java -jar spring-cloud-release-tools-spring-1.0.0.M1.jar --releaser.pom.branch=Camden.SR6
-Using Environment Variables
-In some cases it might be easier to specify environment variables instead of passing parameters to
-releaser. For example, you might want to use environment variables if you are going to be
-releasing multiple projects, this keeps you from having to specify the same parameters for
-each release
$ export RELEASER_POM_BRANCH=Dalston.RELEASE
-$ export RELEASER_GIT_OAUTH_TOKEN=...
-$ wget https://repo.spring.io/libs-milestone/org/springframework/cloud/internal/spring-cloud-release-tools-spring/1.0.0.M1/spring-cloud-release-tools-spring-1.0.0.M1.jar -O spring-cloud-release-tools-spring-1.0.0.M1.jar
-$ java -jar target/spring-cloud-release-tools-spring-1.0.0.M1.jar --releaser.working-dir=/path/to/project/root
-Releasing through Jenkins
-| - - | --Whenever a release process is broken, Jenkins marks it with a red ball and breaks the build. Whenever a post-release action went wrong but the release is successful, Jenkins marks the build with a yellow ball and marks the build as unstable. - | -
Releasing a Single Project
-Let us assume that we are to release spring-cloud-build project. We need to do the following steps:
-
-
-
-
Create a branch (for example,
-springCloudBuildRelease) in a project that contains a BOM (for example, spring-cloud-release). The following example shows how to do so:
-
$ git clone git@github.com:spring-cloud/spring-cloud-release.git
-$ cd spring-cloud-release
-$ git checkout -b springCloudBuildRelease
--
-
-
-
Update all versions as if you were doing a release train. We need to update the project’s versions, Boot version, and dependencies versions, too. Let us assume that we will eventually be doing a release train for the
-Hoxton.M1release, Spring Boot to the latest available one, andspring-cloud-commonsto1.2.3.BUILD-SNAPSHOT. The following example shows how to do so:
-
// setting the release train value
-$ ./mvnw versions:set -DnewVersion=Hoxton.M1 -DgenerateBackupPoms=false -DprocessAllModules=true
-// Update all parent versions
-$ ./mvnw versions:update-parent -DgenerateBackupPoms=false -DprocessAllModules=true
-// Setting the necessary dependencies
-$ ./mvnw versions:set-property -Dproperty=spring-cloud-commons.version -DnewVersion=1.2.3.BUILD-SNAPSHOT -pl spring-cloud-dependencies -DgenerateBackupPoms=false
-// NOTE!!!
-// Verify that the versions set by Maven are correct!!
-$ git diff
-// commit and push the branch
-$ git add . && git commit -m "Updating project for Spring Cloud Build release" && git push origin springCloudBuildRelease
-| - - | -
-If you’re doing a e.g. M1 release, remember to not have any snapshot versions in this branch.
- |
-
Since the project is prepared, go to Jenkins and select the Releaser view, which the following image shows:
-
--
-
-
-
Pick the proper releaser project (for example,
-spring-cloud-build-releaser). The following image shows the settings for this example:
-
--
-
-
-
Next, click
-Build with parameters. The following image shows the UI for doing so:
-
-Pick from which branch you would like the project (for example, spring-cloud-build - defaults to master) to be built and update the RELEASER_POM_BRANCH to point to the checked-out branch of Spring Cloud Release (for example, springCloudBuildRelease). You can pick whether you want to perform only post-release tasks or the whole release.
-
-
-
-
Finally, click
-Build.
-
You are done!
-As a post action, do not forget to remove the branch. The following example shows how to do so:
-// to synchronize any deleted branches (don't run this if you want leave any deleted branches that were deleted in the origin)
-$ git fetch -p
-$ git branch -d springCloudBuildRelease
-$ git push origin --delete springCloudBuildRelease
-Releasing a Release Train
-We call a release train a meta-release. In order to perform one, you need to:
-
-
-
-
In your project (which must contain a BOM, such as
-spring-cloud-release) you have to have a branch, where you store properties with versions of your projects. For example, the branch name can be jenkins-releaser-config). The folloiwng example shows how to do so:
-
$ git clone git@github.com:spring-cloud/spring-cloud-release.git
-$ cd spring-cloud-release
-$ git checkout jenkins-releaser-config
--
-
-
-
Create a file that contains all properties for a given release train. The name of the release train should be lowercase, and dots should be converted to underscores. For example, for the
-Greenwich.SR2release train we need to have a file namedgreenwich_sr2.properties. The following example shows how to do so:
-
$ touch greenwich_sr2.properties
--
-
-
-
We need to update the file with all versions for the release train. The properties file contains an ordered list of
-releaser.fixed-versions[project-name]=project-versionentries, as the following listing shows:
-
$ echo "releaser.fixed-versions[spring-boot]=2.1.5.RELEASE
-releaser.fixed-versions[spring-cloud-build]=2.1.5.RELEASE
-releaser.fixed-versions[spring-cloud-commons]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-function]=2.0.2.RELEASE
-releaser.fixed-versions[spring-cloud-stream]=Fishtown.SR3
-releaser.fixed-versions[spring-cloud-aws]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-bus]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-task]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-config]=2.1.3.RELEASE
-releaser.fixed-versions[spring-cloud-netflix]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-cloudfoundry]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-kubernetes]=1.0.2.RELEASE
-releaser.fixed-versions[spring-cloud-openfeign]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-consul]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-gateway]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-security]=2.1.3.RELEASE
-releaser.fixed-versions[spring-cloud-sleuth]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-zookeeper]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-contract]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-gcp]=1.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-vault]=2.1.2.RELEASE
-releaser.fixed-versions[spring-cloud-release]=Greenwich.SR2" >> greenwich_sr2.properties
-$ git add greenwich_sr2.properties && git commit -m "Added Greenwich.SR2 properties" && git push origin jenkins-releaser-config
-Since the project is prepared, go to Jenkins and select the Releaser view, as the following image shows:
-
--
-
-
-
Pick the proper meta-releaser project (for example,
-spring-cloud-meta-releaser), as the following image shows:
-
--
-
-
-
Next, click
-Build with parameters.
-
-You have quite a few options to pick, but the most important one is to set the value of the RELEASE_VERSION to the given release train version (for example, Greenwich.SR2). Continue updating the rest of the fields if necessary and read the field descriptions and this documentation for more information.
-
-
-
-
Finally, click
-Build.
-
You are done!
-FAQ
-JSchException: Auth fail
-You may get an exception similar to the following:
-Caused by: org.eclipse.jgit.errors.TransportException: git@github.com:spring-cloud/spring-cloud-sleuth.git: Auth fail
- at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:160) ~[org.eclipse.jgit-4.6.0.201612231935-r.jar!/:4.6.0.201612231935-r]
- at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:137) ~[org.eclipse.jgit-4.6.0.201612231935-r.jar!/:4.6.0.201612231935-r]
- at org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init>(TransportGitSsh.java:322) ~[org.eclipse.jgit-4.6.0.201612231935-r.jar!/:4.6.0.201612231935-r]
- at org.eclipse.jgit.transport.TransportGitSsh.openPush(TransportGitSsh.java:167) ~[org.eclipse.jgit-4.6.0.201612231935-r.jar!/:4.6.0.201612231935-r]
- at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:160) ~[org.eclipse.jgit-4.6.0.201612231935-r.jar!/:4.6.0.201612231935-r]
- at org.eclipse.jgit.transport.Transport.push(Transport.java:1275) ~[org.eclipse.jgit-4.6.0.201612231935-r.jar!/:4.6.0.201612231935-r]
- at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:161) ~[org.eclipse.jgit-4.6.0.201612231935-r.jar!/:4.6.0.201612231935-r]
- ... 25 common frames omitted
-Caused by: com.jcraft.jsch.JSchException: Auth fail
- at com.jcraft.jsch.Session.connect(Session.java:512) ~[jsch-0.1.53.jar!/:na]
- at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:117) ~[org.eclipse.jgit-4.6.0.201612231935-r.jar!/:4.6.0.201612231935-r]
- ... 31 common frames omitted
-To fix that just call, run the following commands before running the app:
-# to run the agent
-$ eval `ssh-agent`
-# to store the pass in the agent
-$ ssh-add ~/.ssh/id_rsa
-