From bfc3b8c6af2174910b6eb74592b2cc0428df5527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Henning?= <soeren.henning@email.uni-kiel.de> Date: Fri, 26 Feb 2021 12:58:39 +0100 Subject: [PATCH] First draft to lift up benchmark pipeline --- .gitlab-ci.yml | 257 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 250 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0dda0bdb6..187fc47b5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,13 +1,256 @@ -workflow: +stages: + - triggers # TODO remove + - build + - test + - check + - deploy + +.benchmarks: + image: openjdk:11-jdk + tags: + - exec-docker + variables: + GRADLE_OPTS: "-Dorg.gradle.daemon=false" + cache: + paths: + - .gradle + before_script: + - cd benchmarks + - export GRADLE_USER_HOME=`pwd`/.gradle + +build-benchmarks: + stage: build + extends: .benchmarks + script: ./gradlew --build-cache assemble + artifacts: + paths: + - "benchmarks/build/libs/*.jar" + - "benchmarks/*/build/distributions/*.tar" + expire_in: 1 day + +test-benchmarks: + stage: test + extends: .benchmarks + script: ./gradlew test --continue + artifacts: + reports: + junit: + - "benchmarks/**/build/test-results/test/TEST-*.xml" + +checkstyle-benchmarks: + stage: check + extends: .benchmarks + script: ./gradlew checkstyle --continue + artifacts: + paths: + - "benchmarks/*/build/reports/checkstyle/main.html" + when: on_failure + expire_in: 1 day + +pmd-benchmarks: + stage: check + extends: .benchmarks + script: ./gradlew pmd --continue + artifacts: + paths: + - "benchmarks/*/build/reports/pmd/*.html" + when: on_failure + expire_in: 1 day + +spotbugs-benchmarks: + stage: check + extends: .benchmarks + script: ./gradlew spotbugs --continue + artifacts: + paths: + - "benchmarks/*/build/reports/spotbugs/*.html" + when: on_failure + expire_in: 1 day + +.deploy-benchmarks: + stage: deploy + extends: .benchmarks + tags: + - exec-dind + # see https://docs.gitlab.com/ee/ci/docker/using_docker_build.html#tls-enabled + # for image usage and settings for building with TLS and docker in docker + image: docker:19.03.1 + services: + - docker:19.03.1-dind + variables: + DOCKER_TLS_CERTDIR: "/certs" + script: + - DOCKER_TAG_NAME=$(echo $CI_COMMIT_REF_SLUG- | sed 's/^master-$//') + - docker build --pull -t $IMAGE_NAME ./$JAVA_PROJECT_NAME + - "[ ! $CI_COMMIT_TAG ] && docker tag $IMAGE_NAME $CR_HOST/$CR_ORG/$IMAGE_NAME:${DOCKER_TAG_NAME}latest" + - "[ ! $CI_COMMIT_TAG ] && docker tag $IMAGE_NAME $CR_HOST/$CR_ORG/$IMAGE_NAME:$DOCKER_TAG_NAME$CI_COMMIT_SHORT_SHA" + - "[ $CI_COMMIT_TAG ] && docker tag $IMAGE_NAME $CR_HOST/$CR_ORG/$IMAGE_NAME:$CI_COMMIT_TAG" + - echo $CR_PW | docker login $CR_HOST -u $CR_USER --password-stdin + - docker push $CR_ORG/$IMAGE_NAME + - docker logout rules: - - if: $CI_MERGE_REQUEST_ID - when: never - - when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + # - $JAVA_PROJECT_NAME/**/* # hope this can be simplified soon, see #51 + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + +deploy-uc1-kstreams-app: + extends: .deploy-benchmarks + variables: + IMAGE_NAME: "theodolite-uc1-kstreams-app" + JAVA_PROJECT_NAME: "uc1-application" + rules: # hope this can be simplified soon, see #51 + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + - benchmarks/uc1-application/**/* + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + +deploy-uc2-kstreams-app: + extends: .deploy-benchmarks + variables: + IMAGE_NAME: "theodolite-uc2-kstreams-app" + JAVA_PROJECT_NAME: "uc2-application" + rules: # hope this can be simplified soon, see #51 + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + - benchmarks/uc2-application/**/* + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + +deploy-uc3-kstreams-app: + extends: .deploy-benchmarks + variables: + IMAGE_NAME: "theodolite-uc3-kstreams-app" + JAVA_PROJECT_NAME: "uc3-application" + rules: # hope this can be simplified soon, see #51 + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + - benchmarks/uc3-application/**/* + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + +deploy-uc4-kstreams-app: + extends: .deploy-benchmarks + variables: + IMAGE_NAME: "theodolite-uc4-kstreams-app" + JAVA_PROJECT_NAME: "uc4-application" + rules: # hope this can be simplified soon, see #51 + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + - benchmarks/uc4-application/**/* + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + +deploy-uc1-load-generator: + extends: .deploy-benchmarks + variables: + IMAGE_NAME: "theodolite-uc1-workload-generator" + JAVA_PROJECT_NAME: "uc1-workload-generator" + rules: # hope this can be simplified soon, see #51 + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + - benchmarks/uc1-workload-generator/**/* + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + +deploy-uc2-load-generator: + extends: .deploy-benchmarks + variables: + IMAGE_NAME: "theodolite-uc2-workload-generator" + JAVA_PROJECT_NAME: "uc2-workload-generator" + rules: # hope this can be simplified soon, see #51 + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + - benchmarks/uc2-workload-generator/**/* + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + +deploy-uc3-load-generator: + extends: .deploy-benchmarks + variables: + IMAGE_NAME: "theodolite-uc3-workload-generator" + JAVA_PROJECT_NAME: "uc3-workload-generator" + rules: # hope this can be simplified soon, see #51 + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + - benchmarks/uc3-workload-generator/**/* + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + +deploy-uc4-load-generator: + extends: .deploy-benchmarks + variables: + IMAGE_NAME: "theodolite-uc4-workload-generator" + JAVA_PROJECT_NAME: "uc4-workload-generator" + rules: # hope this can be simplified soon, see #51 + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME && $CI_COMMIT_TAG" + when: always + - changes: + - benchmarks/uc4-workload-generator/**/* + - benchmarks/application-kafkastreams-commons/**/* + if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: always + - if: "$CR_HOST && $CR_ORG && $CR_USER && $CR_PW && $IMAGE_NAME && $JAVA_PROJECT_NAME" + when: manual + allow_failure: true + + + + + + + + + + +############## + + -stages: - - triggers -benchmarks: +benchmarks-trigger: stage: triggers trigger: include: benchmarks/.gitlab-ci.yml -- GitLab