diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..a66c187 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,119 @@ +stages: + - lint + - build + - deploy + - release + +default: + image: + name: "alpine/k8s:1.26.3" + +variables: + PIPELINE: + description: "Defines which Path of the Pipeline" + value: "default" + options: + - release + - default + +workflow: + name: "Pipeline for Merge Request: $merge_request_event" + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH + variables: + PIPELINE: "release" + - if: $CI_COMMIT_REF_NAME =~ /release/ + variables: + PIPELINE: "release" + - if: $CI_COMMIT_TAG + when: never + - if: $CI_PIPELINE_SOURCE == "push" + when: never + - if: "$CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS" + when: never + +Helm Lint: + stage: lint + image: + name: alpine/helm:3.11.1 + entrypoint: ["/bin/sh", "-c"] + script: + - helm lint . + +Helm Template: + stage: lint + image: + name: alpine/helm:3.11.1 + entrypoint: ["/bin/sh", "-c"] + script: + - echo "Templating for Answerfile Container Upload" + - helm template . -f answers/container-upload.yaml + +Kubescore: + stage: lint + image: zegl/kube-score:latest + script: + - echo "Scoring the Chart YAML" + - kube-score score Chart.yaml + +Construct Readme: + stage: build + image: + name: registry.knecon.com/knecon/devops/readme-generator:1.1.0 + before_script: + - git clone "https://${CI_GIT_USERNAME}:${CI_GIT_TOKEN}@${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git" "${CI_COMMIT_SHA}" + - git config --global user.email "project_2_bot_18f71e7e9b3d68b252f9d3dc757685bc@noreply.gitlab.knecon.com" + - git config --global user.name "GitLab" + after_script: + - cd "$CI_COMMIT_SHA" + - git add README.md + - |- + CHANGES=$(git status --porcelain | wc -l) + if [ "$CHANGES" -gt "0" ] + then + git status + git commit -m "Automated README.md update" + git push --push-option='ci.skip' origin "${CI_COMMIT_BRANCH}" + fi + script: + - cd "$CI_COMMIT_SHA" + - readme-generator -r README.md -v values.yaml + +Nexus Upload: + stage: release + needs: + - Helm Template + - Helm Lint + rules: + - if: $PIPELINE == "release" + image: registry.knecon.com/knecon/devops/build-image:latest + script: + - |- + export VERSION=$(cat Chart.yaml | grep "^version:" | sed 's/^version: \(.*\)$/\1/g')-$CI_PIPELINE_IID + sed -s "s/^version: .*$/version: $VERSION/g" -i Chart.yaml + - uploadFile=$( helm package . | awk 'NF>1{print q $NF}' ) +# - curl -s -u "${CI_NEXUS_USER}:${CI_NEXUS_PASSWORD}" "${CI_NEXUS_ADDRESS}:443/repository/red-dev/" --upload-file $uploadFile + - echo "TAG=v$(echo $VERSION)" >> variables.env + - echo "FILE=$(echo $uploadFile)" >> variables.env + artifacts: + reports: + dotenv: variables.env + +Helm-pre-release: + stage: release + rules: + - if: $PIPELINE == "release" + needs: + - job: Nexus Upload + artifacts: true + image: registry.gitlab.com/gitlab-org/release-cli:latest + script: + - echo "Releasing version $VERSION" + release: + tag_name: '$TAG' + description: '$TAG' + ref: '$CI_COMMIT_SHA' + assets: + links: + - name: '$FILE' + url: '${CI_NEXUS_ADDRESS}/repository/red-dev/$FILE'