diff --git a/pipeline-scripts/build_and_push_docker_image.sh b/pipeline-scripts/build_and_push_docker_image.sh new file mode 100755 index 0000000000000000000000000000000000000000..e36a7aaf85ab066d923cb37e9eab5b5b03b6bec8 --- /dev/null +++ b/pipeline-scripts/build_and_push_docker_image.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +export IMAGE_TAG=$($SCRIPT_DIR/get_tag_version.sh) +export DOCKER_REGISTRY_IMAGE=$DOCKER_REGISTRY_IMAGE + +if [[ "$CI_COMMIT_REF_NAME" == "main" ]]; then + profile="main" +elif [[ "$CI_COMMIT_REF_NAME" == "release" ]]; then + profile="release" +else + profile="dev" +fi +run_mvn.sh spring-boot:build-image -DskipTests -Dmaven.wagon.http.retryHandler.count=3 -P $profile -Ddocker.publishRegistry.username=${NEXUS_USER} -Ddocker.publishRegistry.password=${NEXUS_PASSWORD} diff --git a/pipeline-scripts/build_maven_project.sh b/pipeline-scripts/build_maven_project.sh new file mode 100755 index 0000000000000000000000000000000000000000..f4ff7592b05799d458312da3bdeb1484910ca49c --- /dev/null +++ b/pipeline-scripts/build_maven_project.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +run_mvn.sh clean install -Dmaven.wagon.http.retryHandler.count=3 -DelasticTests.disabled=true \ No newline at end of file diff --git a/pipeline-scripts/check_version.sh b/pipeline-scripts/check_version.sh new file mode 100755 index 0000000000000000000000000000000000000000..6edafe4a96f44f617670e7a88f20f060908e2025 --- /dev/null +++ b/pipeline-scripts/check_version.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +release_regex='\d+.\d+.\d+' +snapshot_regex='\d+.\d+.\d+-SNAPSHOT' +rootVersion=$(run_mvn.sh help:evaluate -Dexpression=project.version -q -DforceStdout) + +if [[ "$CI_COMMIT_REF_NAME" == "release" ]]; then + if ! [[ "$rootVersion" =~ $release_regex ]]; then + echo "Keine Release Version für Branch $CI_COMMIT_REF_NAME." + exit 1 + fi +else + if ! [[ "$rootVersion" =~ $snapshot_regex ]]; then + echo "Keine Snapshot Version für Branch $CI_COMMIT_REF_NAME." + exit 1 + fi +fi \ No newline at end of file diff --git a/pipeline-scripts/configure_helm.sh b/pipeline-scripts/configure_helm.sh new file mode 100755 index 0000000000000000000000000000000000000000..65fd54f05a7381285a3dc3c8249bce2a5f912985 --- /dev/null +++ b/pipeline-scripts/configure_helm.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +## install helm +apk add --no-cache helm curl +helm plugin install https://github.com/helm-unittest/helm-unittest.git \ No newline at end of file diff --git a/pipeline-scripts/configure_maven.sh b/pipeline-scripts/configure_maven.sh new file mode 100755 index 0000000000000000000000000000000000000000..c08519befa614d2a6c52d6e45bf4f11584b1497f --- /dev/null +++ b/pipeline-scripts/configure_maven.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +## create maven settings file +echo "${MAVEN_SETTINGS_BASE64}" | base64 -d > "${CI_PROJECT_DIR}/settings.xml" + +mv $SCRIPT_DIR/run_mvn.sh /usr/bin \ No newline at end of file diff --git a/pipeline-scripts/configure_python.sh b/pipeline-scripts/configure_python.sh new file mode 100755 index 0000000000000000000000000000000000000000..0bddcc69f5dac3c30fc86f159d55b4ddd1c9df44 --- /dev/null +++ b/pipeline-scripts/configure_python.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +apk add --no-cache python3 py3-pip +# install pyyaml in a virtual environment +python3 -m venv $PYTHON_VENV_PATH +. $PYTHON_VENV_PATH/bin/activate +pip3 install pyyaml \ No newline at end of file diff --git a/pipeline-scripts/deploy_maven_artifact.sh b/pipeline-scripts/deploy_maven_artifact.sh new file mode 100755 index 0000000000000000000000000000000000000000..e6c4ef80d488932e9297ce9fe4e58376ca43eddd --- /dev/null +++ b/pipeline-scripts/deploy_maven_artifact.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +jar_version=$(run_mvn.sh help:evaluate -Dexpression=project.version -q -DforceStdout | sed "s/SNAPSHOT/${CI_COMMIT_REF_NAME:0:20}-SNAPSHOT/") +run_mvn.sh versions:set -DnewVersion=$jar_version -DprocessAllModules=true +run_mvn.sh deploy -DskipTests -Dmaven.wagon.http.retryHandler.count=3 \ No newline at end of file diff --git a/pipeline-scripts/deploy_sbom_to_dependency_track.sh b/pipeline-scripts/deploy_sbom_to_dependency_track.sh new file mode 100755 index 0000000000000000000000000000000000000000..2047443d8651ac439b95ab6ec7bfdb1fefbdead3 --- /dev/null +++ b/pipeline-scripts/deploy_sbom_to_dependency_track.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +image_tag=$($SCRIPT_DIR/get_tag_version.sh) +run_mvn.sh -P ci-build package -DskipTests +run_mvn.sh io.github.pmckeown:dependency-track-maven-plugin:upload-bom -Ddependency-track.apiKey=$dependency_track_api_key -Ddependency-track.projectVersion=$image_tag -Ddependency-track.dependencyTrackBaseUrl=https://dependency-track.ozg-sh.de diff --git a/pipeline-scripts/get_tag_version.sh b/pipeline-scripts/get_tag_version.sh new file mode 100755 index 0000000000000000000000000000000000000000..15d7220f9361810474538205b4f2006a2a067f4c --- /dev/null +++ b/pipeline-scripts/get_tag_version.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +printf $(run_mvn.sh help:evaluate -Dexpression=project.version -q -DforceStdout | sed "s/SNAPSHOT/${CI_COMMIT_REF_NAME:0:20}-SNAPSHOT-${CI_PIPELINE_ID}/") \ No newline at end of file diff --git a/pipeline-scripts/perform_gitops_rollout.sh b/pipeline-scripts/perform_gitops_rollout.sh new file mode 100755 index 0000000000000000000000000000000000000000..34dd6841cd7ede595f57048b6cb92b77b7f9dc90 --- /dev/null +++ b/pipeline-scripts/perform_gitops_rollout.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +clone_gitops_repo() { + git clone https://$GITEA_USER:$GITEA_PASSWORD@git.ozg-sh.de/ozgcloud-devops/gitops.git + cd gitops +} + +environment="$1" +service_name="$2" +service_value=$(echo $service_name | sed "s/-/_/g") +new_version=$($SCRIPT_DIR/get_tag_version.sh) + +clone_gitops_repo +. $PYTHON_VENV_PATH/bin/activate +python3 $SCRIPT_DIR/set_version.py "$environment/application/values/$service_name-values.yaml" "$service_value" "$new_version" || exit 1 + +git add $environment/application/values/$service_name-values.yaml +git commit -m "gitlab rollout $environment $service_name version $new_version" +git push https://$GITEA_USER:$GITEA_PASSWORD@git.ozg-sh.de/ozgcloud-devops/gitops.git \ No newline at end of file diff --git a/pipeline-scripts/run_mvn.sh b/pipeline-scripts/run_mvn.sh new file mode 100755 index 0000000000000000000000000000000000000000..cabd0f0c726d3c1bc58874b065c003c8f587fef6 --- /dev/null +++ b/pipeline-scripts/run_mvn.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +mvn -s "${CI_PROJECT_DIR}/settings.xml" -B -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn --no-transfer-progress "$@" +if [[ "$?" -ne 0 ]] ; then + echo 'Maven command failed!'; exit 1 +fi diff --git a/pipeline-scripts/set_version.py b/pipeline-scripts/set_version.py new file mode 100755 index 0000000000000000000000000000000000000000..51f1beaff21c9f6670fd3a3086deb8131bb60e14 --- /dev/null +++ b/pipeline-scripts/set_version.py @@ -0,0 +1,16 @@ +#!/usr/bin/python3 + +import yaml +import sys + +values_file = sys.argv[1] +service_name = sys.argv[2] +new_version = sys.argv[3] + +with open(values_file) as file: + ymldoc = yaml.safe_load(file) + ymldoc[service_name]['image']['tag'] = new_version + ymldoc[service_name]['helm']['version'] = new_version + +with open(values_file, "w") as ostream: + yaml.dump(ymldoc, ostream, default_flow_style=False, sort_keys=False) \ No newline at end of file diff --git a/pipeline-scripts/test_build_deploy_helm_chart.sh b/pipeline-scripts/test_build_deploy_helm_chart.sh new file mode 100755 index 0000000000000000000000000000000000000000..5d2e91951da02aa61a8cf56aa0a7619ef8794a63 --- /dev/null +++ b/pipeline-scripts/test_build_deploy_helm_chart.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +service_name="$1" + +helm_chart_version=$($SCRIPT_DIR/get_tag_version.sh) +./run_helm_test.sh +cd src/main/helm +helm package --version=$helm_chart_version . + +if [[ "$CI_COMMIT_REF_NAME" == "release" ]]; then + repository=ozg-base-apps +else + repository=ozg-base-apps-snapshot +fi +curl -u $NEXUS_USER:$NEXUS_PASSWORD -F file=@$service_name-$helm_chart_version.tgz https://nexus.ozg-sh.de/service/rest/v1/components?repository=$repository diff --git a/set_up_scripts.sh b/set_up_scripts.sh new file mode 100644 index 0000000000000000000000000000000000000000..abfb2366378006c57fe8961838ea317918dfe9f2 --- /dev/null +++ b/set_up_scripts.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +source_dir=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +export SCRIPT_DIR="$source_dir/pipeline-scripts" \ No newline at end of file