ATS-628: Update build config on support branches

This commit is contained in:
Cezar.Leahu
2019-12-06 14:39:18 +02:00
committed by CezarLeahu
parent f488654922
commit df3319064b
10 changed files with 410 additions and 0 deletions

82
.travis.yml Normal file
View File

@@ -0,0 +1,82 @@
---
language: java
jdk: openjdk11
dist: xenial
git:
depth: false
quiet: true
services:
- docker
cache:
directories:
- ${HOME}/.m2/repository
- ${HOME}/artifacts
branches:
only:
- master
- /^SP\/.+$/
- /^HF\/.+$/
- company_release
- /^ATS-.*$/
stages:
- build
- release
- company_release
jobs:
include:
- name: "Build + Tests"
stage: build
if: branch NOT IN (company_release)
before_install: bash _ci/init.sh
before_script: travis_wait bash _ci/cache_artifacts.sh
script: bash _ci/build.sh
- name: "WhiteSource"
stage: build
if: branch NOT IN (company_release)
before_install: bash _ci/init.sh
script: bash _ci/whitesource.sh
- name: "Release"
stage: release
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
before_deploy: source _ci/prepare_staging_deploy.sh
deploy:
provider: s3
access_key_id: "${STAGING_AWS_ACCESS_KEY}"
secret_access_key: "${STAGING_AWS_SECRET_KEY}"
bucket: "alfresco-artefacts-staging"
skip_cleanup: true
region: "eu-west-1"
local_dir: "deploy_dir"
upload-dir: "enterprise/AlfrescoTransformServices/TransformEngines/${VERSION}"
on:
all_branches: true
- name: "Company Release"
stage: company_release
if: branch = company_release
before_install: bash _ci/init.sh
install: echo "NoOp"
script: echo "NoOp"
before_deploy: source _ci/prepare_release_deploy.sh
deploy:
provider: s3
access_key_id: "${RELEASE_AWS_ACCESS_KEY}"
secret_access_key: "${RELEASE_AWS_SECRET_KEY}"
bucket: "eu.dl.alfresco.com"
skip_cleanup: true
region: "eu-west-1"
local_dir: "deploy_dir"
upload-dir: "release/enterprise/AlfrescoTransformServices/TransformEngines/${VERSION}"
on:
branch: company_release

24
_ci/build.sh Normal file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env bash
echo "=========================== Starting Build&Test Script ==========================="
PS4="\[\e[35m\]+ \[\e[m\]"
set -vex
pushd "$(dirname "${BASH_SOURCE[0]}")/../"
# Always build the image, but only publish from the "master" branch
[ "${TRAVIS_PULL_REQUEST}" = "false" ] && [ "${TRAVIS_BRANCH}" = "master" ] && PROFILE="internal" || PROFILE="local"
# If the branch is "master" and the commit is not a Pull Request then deploy the JAR SNAPSHOT artifacts
[ "${TRAVIS_PULL_REQUEST}" = "false" ] && [ "${TRAVIS_BRANCH}" = "master" ] && DEPLOY="deploy" || DEPLOY="install"
mvn -B -U \
clean ${DEPLOY} \
-DadditionalOption=-Xdoclint:none -Dmaven.javadoc.skip=true \
"-P${PROFILE},docker-it-setup"
docker ps -a -q | xargs -r -l docker stop ; docker ps -a -q | xargs -r -l docker rm
popd
set +vex
echo "=========================== Finishing Build&Test Script =========================="

24
_ci/cache_artifacts.sh Normal file
View File

@@ -0,0 +1,24 @@
#!/usr/bin/env bash
echo "=========================== Starting Cache Artifacts Script ==========================="
PS4="\[\e[35m\]+ \[\e[m\]"
set -vex
pushd "$(dirname "${BASH_SOURCE[0]}")/../"
LIBREOFFICE_VERSION=5.4.6
# Cache the LibreOffice distribution, as it is takes a long time to download and it can cause the
# build to fail (no output for more than 10 minutes)
LIBREOFFICE_RPM_URL="https://nexus.alfresco.com/nexus/service/local/repositories/thirdparty/content/org/libreoffice/libreoffice-dist/${LIBREOFFICE_VERSION}/libreoffice-dist-${LIBREOFFICE_VERSION}-linux.gz"
if [ -f "${HOME}/artifacts/libreoffice-dist-${LIBREOFFICE_VERSION}-linux.gz" ]; then
echo "Using cached LibreOffice distribution..."
else
echo "Downloading LibreOffice distribution..."
curl -s -S ${LIBREOFFICE_RPM_URL} -o "${HOME}/artifacts/libreoffice-dist-${LIBREOFFICE_VERSION}-linux.gz"
fi
cp "${HOME}/artifacts/libreoffice-dist-${LIBREOFFICE_VERSION}-linux.gz" alfresco-docker-libreoffice/
popd
set +vex
echo "=========================== Finishing Cache Artifacts Script =========================="

20
_ci/init.sh Normal file
View File

@@ -0,0 +1,20 @@
#!/usr/bin/env bash
echo "=========================== Starting Init Script ==========================="
PS4="\[\e[35m\]+ \[\e[m\]"
set -vex
pushd "$(dirname "${BASH_SOURCE[0]}")/../"
mkdir -p ${HOME}/.m2 && cp -rf _ci/settings.xml ${HOME}/.m2/
echo "${QUAY_PASSWORD}" | docker login -u="alfresco+bamboo" --password-stdin quay.io
echo "${DOCKERHUB_PASSWORD}" | docker login -u=${DOCKERHUB_USERNAME} --password-stdin docker.io
find "${HOME}/.m2/repository/" -type d -name "*-SNAPSHOT*" | xargs -r -l rm -rf
# Enable experimental docker features (e.g. squash options)
echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
sudo service docker restart
popd
set +vex
echo "=========================== Finishing Init Script =========================="

View File

@@ -0,0 +1,24 @@
#!/usr/bin/env bash
echo "========================== Starting Prepare Release Deploy Script ==========================="
PS4="\[\e[35m\]+ \[\e[m\]"
set -vex
pushd "$(dirname "${BASH_SOURCE[0]}")/../"
# Identify latest annotated tag (latest version)
export VERSION=$(git describe --abbrev=0 --tags)
mkdir -p deploy_dir
# Download the WhiteSource report
mvn org.alfresco:whitesource-downloader-plugin:inventoryReport \
-N \
"-Dorg.whitesource.product=Transform Service" \
-DsaveReportAs=deploy_dir/3rd-party.xlsx
echo "Local deploy directory content:"
ls -lA deploy_dir
popd
set +vex
echo "========================== Finishing Prepare Release Deploy Script =========================="

View File

@@ -0,0 +1,24 @@
#!/usr/bin/env bash
echo "========================== Starting Prepare Staging Deploy Script ==========================="
PS4="\[\e[35m\]+ \[\e[m\]"
set -vex
pushd "$(dirname "${BASH_SOURCE[0]}")/../"
# Identify latest annotated tag (latest version)
export VERSION=$(git describe --abbrev=0 --tags)
mkdir -p deploy_dir
# Download the WhiteSource report
mvn org.alfresco:whitesource-downloader-plugin:inventoryReport \
-N \
"-Dorg.whitesource.product=Transform Service" \
-DsaveReportAs=deploy_dir/3rd-party.xlsx
echo "Local deploy directory content:"
ls -lA deploy_dir
popd
set +vex
echo "========================== Finishing Prepare Staging Deploy Script =========================="

28
_ci/release.sh Normal file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env bash
echo "=========================== Starting Release Script ==========================="
PS4="\[\e[35m\]+ \[\e[m\]"
set -vex
pushd "$(dirname "${BASH_SOURCE[0]}")/../"
# For PR builds only execute a Dry Run of the release
[ "${TRAVIS_PULL_REQUEST}" = "false" ] && DRY_RUN="" || DRY_RUN="-DdryRun"
# Travis CI runner work on DETACHED HEAD, so we need to checkout the release branch
git checkout -B "${TRAVIS_BRANCH}"
git config user.email "build@alfresco.com"
# Run the release plugin - with "[skip ci]" in the release commit message
mvn -B \
${DRY_RUN} \
-Prelease \
"-Darguments=-Prelease -DskipTests -Dmaven.javadoc.skip -Dadditionalparam=-Xdoclint:none" \
release:clean release:prepare release:perform \
-DscmCommentPrefix="[maven-release-plugin][skip ci] " \
-Dusername=alfresco-build \
-Dpassword=${GIT_PASSWORD}
popd
set +vex
echo "=========================== Finishing Release Script =========================="

85
_ci/settings.xml Normal file
View File

@@ -0,0 +1,85 @@
<settings>
<profiles>
<profile>
<id>alfresco-internal</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>alfresco-internal</id>
<name>Alfresco Internal Repository</name>
<url>https://artifacts.alfresco.com/nexus/content/groups/internal</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>alfresco-internal</id>
<name>Alfresco Internal Repository</name>
<url>https://artifacts.alfresco.com/nexus/content/groups/internal</url>
</pluginRepository>
</pluginRepositories>
<properties>
<!-- WhiteSource token -->
<org.whitesource.orgToken>${env.WHITESOURCE_TOKEN}</org.whitesource.orgToken>
</properties>
</profile>
</profiles>
<servers>
<!-- Credential for private Nexus repository groups -->
<server>
<id>alfresco-internal</id>
<username>bamboo</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
<!-- Credential for private Nexus repositories -->
<server>
<id>alfresco-internal-snapshots</id>
<username>bamboo</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
<server>
<id>alfresco-internal-releases</id>
<username>bamboo</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
<server>
<id>alfresco-enterprise-snapshots</id>
<username>bamboo</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
<server>
<id>alfresco-enterprise-releases</id>
<username>bamboo</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
<server>
<id>alfresco-public-snapshots</id>
<username>bamboo</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
<server>
<id>alfresco-public</id>
<username>bamboo</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
<server>
<id>alfresco-thirdparty</id>
<username>bamboo</username>
<password>${env.NEXUS_PASSWORD}</password>
</server>
<!-- private docker registry-->
<server>
<id>quay.io</id>
<username>alfresco+bamboo</username>
<password>${env.QUAY_PASSWORD}</password>
</server>
<server>
<id>docker.io</id>
<username>${env.DOCKERHUB_USERNAME}</username>
<password>${env.DOCKERHUB_PASSWORD}</password>
</server>
</servers>
</settings>

22
_ci/whitesource.sh Normal file
View File

@@ -0,0 +1,22 @@
#!/usr/bin/env bash
echo "=========================== Starting WhiteSource Script ==========================="
PS4="\[\e[35m\]+ \[\e[m\]"
set -vex
pushd "$(dirname "${BASH_SOURCE[0]}")/../"
mvn clean install \
-DskipTests org.whitesource:whitesource-maven-plugin:update \
-Dorg.whitesource.failOnError=true \
-Dorg.whitesource.forceUpdate=true \
-Dorg.whitesource.checkPolicies=true \
-Dorg.whitesource.forceCheckAllDependencies=true \
-Dorg.whitesource.ignorePomModules=false \
"-Dorg.whitesource.product=Transform Service" \
-Dmaven.wagon.http.pool=false
popd
set +vex
echo "=========================== Finishing WhiteSource Script =========================="

77
docs/build-and-release.md Normal file
View File

@@ -0,0 +1,77 @@
# Build
The `alfresco-transform-core` project uses _Travis CI_. \
The `.travis.yml` config file can be found in the root of the repository.
## Stages and Jobs
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` / `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.
All other branches are ignored.
## Release process steps & info
Prerequisites:
- 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 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.
> 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:
- The **Release** stage is complete - i.e. the release commit is tagged and the release
artifacts are deployed on Nexus.
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.