ATS-628: Update release process

This commit is contained in:
Cezar.Leahu 2019-12-04 18:20:15 +02:00 committed by CezarLeahu
parent 4e5915b941
commit d863b63e4e
2 changed files with 55 additions and 85 deletions

View File

@ -19,8 +19,7 @@ branches:
only:
- master
- /^SP\/.+$/
- release
- /^release\/SP\/.+$/
- /^HF\/.+$/
- company_release
- /^ATS-.*$/
@ -31,7 +30,7 @@ stages:
jobs:
include:
- name: "Build"
- name: "Build + Tests"
stage: build
if: branch NOT IN (company_release)
before_install: bash _ci/init.sh
@ -46,7 +45,7 @@ jobs:
- name: "Release"
stage: release
if: branch = release OR branch =~ /^release\/SP\/.+$/
if: commit_message ~= /\[trigger release\]/ AND branch ~= /^(master|SP\/.+|HF\/.+)$/
before_install: bash _ci/init.sh
before_script: travis_wait bash _ci/cache_artifacts.sh
script: travis_wait 30 bash _ci/release.sh

View File

@ -4,36 +4,29 @@ The `.travis.yml` config file can be found in the root of the repository.
## Stages and Jobs
1. **Build**: Java Build with Unit and Integration Tests, WhiteSource
2. **Release**: Publish to Quay & DockerHub, Publish the S3 staging
3. **Company Release**: Publish to S3 release
1. **Build**: Java build with unit tests, integration tests and WhiteSource scan.
2. **Release**: Release with artifact deployment to Nexus and AWS Staging bucket.
3. **Company Release**: Artifact deployment to AWS Release bucket.
## Branches
Travis CI builds differ by branch:
* `master`:
- regular builds which include only the _Build_ stage;
- the _Build_ stage updates the `latest` T-Engines images (only
from the `master` branch) on both Quay and DockerHub:
- alfresco/alfresco-pdf-renderer
- alfresco/alfresco-imagemagick
- alfresco/alfresco-tika
- alfresco/alfresco-libreoffice
* `ATS-*` (any branch starting with "ATS-"), `SP/1.3.N` and `SP/2.0.N`:
- regular builds which include only the _Build_ stage;
- although built and used on the CI agent, no docker images are updated on remote repositories;
* `release`:
- builds that include the _Build_ and _Release_ stages;
- PR builds with release as the target branch only execute dry runs of the actual release,
without actually publishing anything;
* `release/SP/1.3.N` and `release/SP/2.0.N`:
- builds that include the _Build_ and _Release_ stages;
- PR builds with one of the release branches as the target branch only execute dry runs of the actual release,
without actually publishing anything;
- the branches should be deleted once the builds are completed
* `company_release`:
- builds that include only the `company_release` stage;
* `master` / `SP/*` / `HF/*` branches:
- regular builds which include the _Build_ stage;
> On the `master` branch only the _Build_ stage updates the `latest` T-Engines images on
> both Quay and DockerHub:
> - alfresco/alfresco-pdf-renderer
> - alfresco/alfresco-imagemagick
> - alfresco/alfresco-tika
> - alfresco/alfresco-libreoffice
- if the commit message contains the `[trigger release]` tag, the builds will also
include the _Release_ stage;
- PR builds where the latest commit contains the `[trigger release]` tag will execute dry runs
of the release jobs (no artifacts will be published until the PR is actually merged).
* `ATS-*` branches:
- regular builds which include only the _Build_ and _Tests_ stages;
* `company_release` branch:
- builds that include the _Company Release_ stage only.
- the `company_release` branch should be used for one-off events; once used (a build
completes), the branch should be deleted.
@ -42,65 +35,43 @@ All other branches are ignored.
## Release process steps & info
Prerequisites:
- the `master` branch has a green build and it contains all the changes that should be included in
the next release
- the `master` / `SP/*` / `HF/*` branch is green and it contains all the changes that should be
included in the next release.
Steps:
1. Create a new branch from the `master` branch with the name `ATS-###_release_version`;
2. (Optional) Update the project version if the current POM version is not the next desired
release; use a maven command, i.e. `mvn versions:set -DnewVersion=2.0.19-SNAPSHOT versions:commit`;
3. Update the project's dependencies (remove the `-SNAPSHOT` suffixes) through a new commit on the
`ATS-###_release_version` branch;
4. Open a new Pull Request from the `ATS-###_release_version` branch into the `release` branch and
wait for a green build; the **Release** stage on the PR build will only execute a _Dry_Run_ of
the release;
5. Once it is approved, merge the PR through the **Create a merge commit** option (as opposed to
_Squash and merge_ or _Rebase and merge_), delete the `ATS-###_release_version` branch, and wait
for a green build on the `release` branch;
6. Merge back the `release` branch into the `master` branch;
7. Update the project dependencies (append the `-SNAPSHOT` suffixes)
1. Create a new branch with the name `ATS-###_release_version` from the `master` / `SP/*`/ `HF/*`
branch.
2. Update the project version if the current POM version is not the next desired release; use a
maven command, i.e.
```bash
mvn versions:set -DnewVersion=#.##.#-SNAPSHOT versions:commit
```
3. Update the project's dependencies (remove the `-SNAPSHOT` suffixes - only for dependencies, not
for the local project version).
4. Create a new commit with the `[trigger release]` tag in its message. If no local changes have
been generated by steps (2) and (3), then an empty commit should be created - e.g.
```bash
git commit --allow-empty -m "ATS-###: Release AIS #.##.# [trigger release]"
```
> The location of the `[trigger release]` tag in the commit message is irrelevant.
Steps (6) and (7) can be done either directly from an IDE or through the GitHub flow, by creating
another branch and PR. Just make sure you don't add extra commits directly to the release branch,
as this will trigger another release.
After the release, the reference deployments (docker-compose, helm) should be updated with the
latest docker image tags.
### Release of a Service Pack (SP/1.3.N or SP/2.0.N)
Prerequisites:
- the `SP/<version>` (<version> could be 1.3.N or 2.0.N) branch has a green build and it contains all the changes that should be included in
the next release
**NOTE**: Make sure you release the proper version and the `SP/<version>` is merged into the correct `release/SP/<version>` (both having the same version).
E.g. When releasing a 1.3.N Service Pack, a new branch (`ATS-###_release_version`) should be created from `SP/1.3.N` and the PR should target the `release/SP/1.3.N` branch.
Steps (similar to those describing the release from `master`):
1. Create a new branch from the `SP/<version>` (SP/1.3.N or SP/2.0.N) branch with the name `ATS-###_release_version`;
2. (Optional) Update the project version if the current POM version is not the next desired
release; use a maven command, i.e. `mvn versions:set -DnewVersion=1.3.1-SNAPSHOT versions:commit`;
3. Update the project's dependencies (remove the `-SNAPSHOT` suffixes) through a new commit on the
`ATS-###_release_version` branch;
4. Open a new Pull Request from the `ATS-###_release_version` branch into the `release/SP/<version>` branch and
wait for a green build; the **Release** stage on the PR build will only execute a _Dry_Run_ of
the release;
5. Once it is approved, merge the PR through the **Create a merge commit** option (as opposed to
_Squash and merge_ or _Rebase and merge_), delete the `ATS-###_release_version` branch, and wait
for a green build on the `release` branch;
6. Merge back the `release/SP/<version>` branch into the `SP/<version>` branch;
7. Update the project dependencies (append the `-SNAPSHOT` suffixes)
> If for any reason your PR contains multiple commits, the commit with the `[trigger release]`
tag should be the last (newest) one. This will trigger the Release dry runs.
5. Open a new Pull Request from the `ATS-###_release_version` branch into the original
`master` / `SP/*` / `HF/*` branch and wait for a green build; the **Release** stage on the PR build
will only execute a _Dry_Run_ of the release.
6. Once it is approved, merge the PR, preferably through the **Rebase and merge** option. If the
**Create a merge commit** (_Merge pull request_) or **Squash and merge** options are used, you
need to ensure that the _commit message_ contains the `[trigger release]` tag (sub-string).
## Company Release process steps & info
Prerequisites:
- Engineering Release of the desired version has been done.
Steps:
1. Create a new `company_release` branch from `release`. This job uses the git tag to identify the
version to be uploaded to S3 release bucket.
2. If the last commit on `company_release` branch contains `[skip_ci]` in its message it will
prevent Travis from starting a build. Push an empty commit in order to trigger the build,
`git commit --allow-empty -m "Company Release <version>"`. Wait for a green build on the branch.
3. Delete local and remote `company_release` branch.
- The **Release** stage is complete - i.e. the release commit is tagged and the release
artifacts are deployed on Nexus.
### Release of a Service Pack (SP/1.3.N or SP/2.0.N)
Follow the steps described in the previous section, but instead of creating the `company_release` from `release`, it needs to be created from the proper `release/SP/<version>` (depending on what version needs the Company Release).
Steps:
1. Create a new `company_release` branch from the `master` / `SP/*`/ `HF/*` branch. This job uses
the latest branch git tag to identify the version that must be uploaded to the S3 release bucket.
2. Wait for a green build on the branch.
3. Delete local and remote `company_release` branch.