From 7e7d914a215dc1abef5220cabfa180baf18365a6 Mon Sep 17 00:00:00 2001 From: Karina Schulz Date: Wed, 23 Jun 2021 16:31:16 +0200 Subject: [PATCH] feat(UpdateVersion): Add templates and pipelines to update versions --- .../2eef21b10116aab77b6b014cb5adf007d2d2e128 | 0 .idea/sonarlint/issuestore/index.pb | 3 - .../pipelines/update-version-pipeline.adoc | 114 ++++++++++++++++++ .../chapters/templates/publish-image.adoc | 2 +- .../push-tag-and-version-template.adoc | 20 +++ .../templates/set-version-template.adoc | 27 +++++ documentation/document.adoc | 27 +++-- .../images/Release-Docker-Image-Pipeline.png | Bin 0 -> 38049 bytes pipelines/update-version-pipeline.yml | 22 ++++ publish-image.yml | 2 +- push-tag-and-version-template.yml | 20 +++ set-version-template.yml | 22 ++++ 12 files changed, 245 insertions(+), 14 deletions(-) delete mode 100644 .idea/sonarlint/issuestore/2/e/2eef21b10116aab77b6b014cb5adf007d2d2e128 create mode 100644 documentation/chapters/pipelines/update-version-pipeline.adoc create mode 100644 documentation/chapters/templates/push-tag-and-version-template.adoc create mode 100644 documentation/chapters/templates/set-version-template.adoc create mode 100644 documentation/images/Release-Docker-Image-Pipeline.png create mode 100644 pipelines/update-version-pipeline.yml create mode 100644 push-tag-and-version-template.yml create mode 100644 set-version-template.yml diff --git a/.idea/sonarlint/issuestore/2/e/2eef21b10116aab77b6b014cb5adf007d2d2e128 b/.idea/sonarlint/issuestore/2/e/2eef21b10116aab77b6b014cb5adf007d2d2e128 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb index 201e7fb..e69de29 100644 --- a/.idea/sonarlint/issuestore/index.pb +++ b/.idea/sonarlint/issuestore/index.pb @@ -1,3 +0,0 @@ - -A -publish-image.yml,2/e/2eef21b10116aab77b6b014cb5adf007d2d2e128 \ No newline at end of file diff --git a/documentation/chapters/pipelines/update-version-pipeline.adoc b/documentation/chapters/pipelines/update-version-pipeline.adoc new file mode 100644 index 0000000..4441db9 --- /dev/null +++ b/documentation/chapters/pipelines/update-version-pipeline.adoc @@ -0,0 +1,114 @@ +:sourcedir: ../../../pipelines + +ifndef::imagesdir[] +:imagesdir: ../../images +endif::[] + += update-version-pipeline + +This pipeline provides the jobs to increase the version, create a new tag and updates the changed files (version) the repository. + +It can be extended to push a docker image to a docker registry. + +.Variables +|=== +|Name |Description | Default Value + +|BUMP_VERSION | defines the version bump | "major" +|=== + +== Setup + +This pipeline should be included as a child-pipeline in your gitlab-ci pipeline. +You then can add an individual release job for each kind of version bump. + +NOTE: You only need the variable `PARENT_PIPELINE_ID` , if you use an https://docs.gitlab.com/ee/ci/yaml/README.html#artifact-downloads-to-child-pipelines[artfact of you parent-pipeline in your child pipeline] + +In your gitlab-ci.yml include the following + +.gitlab-ci.yml +[source, yaml] +---- +stages: + - release + +a.major-image-release: + stage: release + when: manual + only: + - master + variables: + BUMP_VERSION: "major" + PARENT_PIPELINE_ID: $CI_PIPELINE_ID + trigger: + include: release.gitlab-ci.yml + strategy: depend + +b.minor-image-release: + stage: release + when: manual + only: + - master + variables: + BUMP_VERSION: "minor" + PARENT_PIPELINE_ID: $CI_PIPELINE_ID + trigger: + include: release.gitlab-ci.yml + strategy: depend + +c.patch-image-release: + stage: release + when: manual + only: + - master + variables: + BUMP_VERSION: "patch" + PARENT_PIPELINE_ID: $CI_PIPELINE_ID + trigger: + include: release.gitlab-ci.yml + strategy: depend + +---- + +Create a child-pipeline file called `release.gitlab-ci.yml` and include the following: + +.release.gitlab-ci.yml +[source, yaml] +---- +stages: + - set-version + - push-tag-and-version + - release + +include: + - project: 'gilden/ci/gitlab-ci-templates' + ref: 'master' + file: + - '/pipelines/update-version-pipeline.yml' + - 'push-image.yml' + +# This is optional +push-docker-image: + stage: release + extends: .push-image-kaniko +# You only need NEED if you use a artifact from your parent pipeline to build the image + needs: + - pipeline: $PARENT_PIPELINE_ID + #Get artifacts from parent pipeline #https://docs.gitlab.com/ee/ci/yaml/README.html#artifact-downloads-to-child-pipelines + job: mvn-build + - job: increase-version + - job: push-tag-version +---- + +You pipeline then looks like the following: + +.Release Pipeline +image::Release-Docker-Image-Pipeline.png[] + +== Pipeline + +.update-version-pipeline +[source, yaml] +---- +include::{sourcedir}/update-version-pipeline.yml[] +---- \ No newline at end of file diff --git a/documentation/chapters/templates/publish-image.adoc b/documentation/chapters/templates/publish-image.adoc index 2c2fa41..5db62b1 100644 --- a/documentation/chapters/templates/publish-image.adoc +++ b/documentation/chapters/templates/publish-image.adoc @@ -12,7 +12,7 @@ Dieser Schritt wird nur ausgeführt, wenn ein Tag gesetzt wird. Falls das Projekt aus mehreren Poms besteht, kann `bevor_script:` benutzt werden. | "true" |=== -.sonar-template +.publish-image-jib-template ---- include::{sourcedir}/publish-image.yml[] ---- \ No newline at end of file diff --git a/documentation/chapters/templates/push-tag-and-version-template.adoc b/documentation/chapters/templates/push-tag-and-version-template.adoc new file mode 100644 index 0000000..6334557 --- /dev/null +++ b/documentation/chapters/templates/push-tag-and-version-template.adoc @@ -0,0 +1,20 @@ +:sourcedir: ../../../ + += push-tag-and-version-template + +This template creates a new tag und updates the version of your project in the repository. +For more details: https://gitlab.exxcellent.de/gilden/ci/exxcellent-ssh-tool[Gilde CI/CD: exxcellent-ssh-tool]. + + +.Variables +|=== +|Name |Description | Default Value +|ARTIFACT | the name of the artifact the new version is written to by the `set-version` job |"version" +|MVN_VERSION | defines if the `mvn version:set` command will be run | "true" +|=== + +.push-tag-and-version-template +[source, yaml] +---- +include::{sourcedir}/push-tag-and-version-template.yml[] +---- \ No newline at end of file diff --git a/documentation/chapters/templates/set-version-template.adoc b/documentation/chapters/templates/set-version-template.adoc new file mode 100644 index 0000000..688bf47 --- /dev/null +++ b/documentation/chapters/templates/set-version-template.adoc @@ -0,0 +1,27 @@ +:sourcedir: ../../../ + += set-version-template + +This template provides the job for increasing the tag version. +For more details look at https://gitlab.exxcellent.de/gilden/ci/exxcellent-increase-version-tool[Gilde CI/CD: exxcellent-increase-version-tool]. + + +.Variables +|=== +|Name |Description | Default Value +|BUMP_VERSION | defines the version bump | "major" +|PREFIX | the prefix for the tag | "" +|OUTPUT | defines where the updated version is written to | version +|SIMPLITY +a| +* "false": +** use semver version number. e.g: 1.2.3+build.6 +* "true": +** use more traditional version number. e.g: 1.2.3.6 | "false" +|=== + +.set-version-template +[source, yaml] +---- +include::{sourcedir}/set-version-template.yml[] +---- \ No newline at end of file diff --git a/documentation/document.adoc b/documentation/document.adoc index 65a24ae..98d2eef 100644 --- a/documentation/document.adoc +++ b/documentation/document.adoc @@ -35,19 +35,28 @@ toc::[] include::chapters/generalInformation.adoc[leveloffset=1] == Misc Templates +//include::chapters/templates/sonar-template.adoc[leveloffset=1] +include::chapters/templates/publish-image.adoc[leveloffset=2] + +== Update Version + +=== Templates +include::chapters/templates/push-tag-and-version-template.adoc[leveloffset=3] +include::chapters/templates/set-version-template.adoc[leveloffset=3] + +=== Pipeline +include::chapters/pipelines/update-version-pipeline.adoc[leveloffset=3] -include::chapters/templates/sonar-template.adoc[leveloffset=1] -include::chapters/templates/publish-image.adoc[leveloffset=1] == NPM Templates -include::chapters/templates/npm-dependencies-template.adoc[leveloffset=1] -include::chapters/templates/npm-build-template.adoc[leveloffset=1] -include::chapters/templates/npm-lint-template.adoc[leveloffset=1] -include::chapters/templates/npm-test-template.adoc[leveloffset=1] +include::chapters/templates/npm-dependencies-template.adoc[leveloffset=2] +include::chapters/templates/npm-build-template.adoc[leveloffset=2] +include::chapters/templates/npm-lint-template.adoc[leveloffset=2] +include::chapters/templates/npm-test-template.adoc[leveloffset=2] == Maven Templates -include::chapters/templates/maven-dependencies-template.adoc[leveloffset=1] -include::chapters/templates/maven-build-template.adoc[leveloffset=1] -include::chapters/templates/maven-verify-template.adoc[leveloffset=1] \ No newline at end of file +include::chapters/templates/maven-dependencies-template.adoc[leveloffset=2] +include::chapters/templates/maven-build-template.adoc[leveloffset=2] +include::chapters/templates/maven-verify-template.adoc[leveloffset=2] \ No newline at end of file diff --git a/documentation/images/Release-Docker-Image-Pipeline.png b/documentation/images/Release-Docker-Image-Pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..5b8ed742ecc271e80ecb4c2272e9f50510fc60d0 GIT binary patch literal 38049 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
j-@Cw+v#*_8jz8+SZ#ijm|i4tQS9OIcCPDk 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 literal 0 HcmV?d00001 diff --git a/pipelines/update-version-pipeline.yml b/pipelines/update-version-pipeline.yml new file mode 100644 index 0000000..78f7a19 --- /dev/null +++ b/pipelines/update-version-pipeline.yml @@ -0,0 +1,22 @@ +stages: + - set-version + - push-tag-and-version + +include: + - project: 'gilden/ci/gitlab-ci-templates' + ref: 'master' + file: + - 'set-version-template.yml' + - 'push-tag-and-version-template.yml' + +variables: + BUMP_VERSION: "major" + +increase-version: + stage: set-version + extends: .set-version + +push-tag-and-version: + stage: push-tag-and-version + extends: .push-tag-and-version + diff --git a/publish-image.yml b/publish-image.yml index 5abb8a8..d96e566 100644 --- a/publish-image.yml +++ b/publish-image.yml @@ -19,7 +19,7 @@ .publish-image-kaniko: image: - name: gcr.io/kaniko-project/executor:debug + name: gcr.io/kaniko-project/executor:v1.6.0-debug entrypoint: [ "" ] stage: package rules: diff --git a/push-tag-and-version-template.yml b/push-tag-and-version-template.yml new file mode 100644 index 0000000..57d13a6 --- /dev/null +++ b/push-tag-and-version-template.yml @@ -0,0 +1,20 @@ +.push-tag-and-version: + stage: push-tag-and-version + image: gitlab.exxcellent.de:4567/gilden/ci/exxcellent-ssh-tool:1.2.0 + variables: + ARTIFACT: "version" + MVN_VERSION: "true" + before_script: + - setup-ssh + script: + - export VERSION="0.0.0" + - "[ -f ./$ARTIFACT ] && export VERSION=$(cat ./$ARTIFACT)" + - echo $VERSION + - pull + - echo $VERSION > $ARTIFACT + - curl https://img.shields.io/badge/Version-$VERSION-green.svg --output $ARTIFACT.svg + - > + if [ "${MVN_VERSION}" == "true" ]; then + mvn versions:set -DnewVersion=$VERSION -DgenerateBackupPoms=false + fi + - push $VERSION diff --git a/set-version-template.yml b/set-version-template.yml new file mode 100644 index 0000000..959e7cf --- /dev/null +++ b/set-version-template.yml @@ -0,0 +1,22 @@ +.set-version: + stage: set-version + image: gitlab.exxcellent.de:4567/gilden/ci/exxcellent-increase-version-tool:2.1.1 + variables: + BUMP_VERSION: "major" + PREFIX: "" + OUTPUT: version + SIMPLIFY: "false" + script: + - > + if [ "${PREFIX}" != "" ]; then + if [ "${SIMPLIFY} == "true" ]; then + gen-push --version $BUMP_VERSION --tag "false" --prefix $PREFIX --simplify > $OUTPUT + else + gen-push --version $BUMP_VERSION --tag "false" --prefix $PREFIX > $OUTPUT + fi + else + gen-push --version $BUMP_VERSION --tag "false" > $OUTPUT + fi + artifacts: + paths: + - $OUTPUT