Merge branch 'Docker-publish-rework' into 'master'

feat(Container Publish): Cleanup Container Publishing

See merge request gilden/ci/gitlab-ci-templates!32
This commit is contained in:
Wolfram Gulde 2021-11-10 08:09:38 +00:00
commit 166b015fe5
4 changed files with 89 additions and 29 deletions

View File

@ -0,0 +1,30 @@
include:
- local: 'container-publish.gitlab-ci.yml'
.container-publish-snapshot-rules: &container-publish-snapshot-rules
stage: snapshot
rules:
- if: "$CI_PIPELINE_SOURCE == 'merge_request_event'"
when: never
- if: '$CI_COMMIT_REF_NAME =~ /^feature/'
variables:
IMAGE_TAG: $CI_COMMIT_REF_SLUG
- if: '$CI_COMMIT_REF_NAME =~ /^refactor/'
variables:
IMAGE_TAG: $CI_COMMIT_REF_SLUG
- if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
variables:
IMAGE_TAG: "latest"
- when: never
.publish-image-jib-maven-snapshot:
<<: *container-publish-snapshot-rules
extends: .publish-image-jib-maven
.publish-image-jib-gradle-snapshot:
<<: *container-publish-snapshot-rules
extends: .publish-image-jib-gradle
.publish-image-kaniko-snapshot:
<<: *container-publish-snapshot-rules
extends: .publish-image-kaniko

View File

@ -1,16 +1,26 @@
.publish-image-jib: .container-publish-common: &container-publish-common
image: $MAVEN_IMAGE before_script:
- export PARSED_VERSION=$(echo $IMAGE_TAG | sed -r 's/\+/_/g') # Replace + sign since this is not valid in a docker tag
- echo $PARSED_VERSION
stage: package stage: package
rules: rules:
- if: $CI_COMMIT_TAG - if: $CI_COMMIT_TAG
variables:
IMAGE_TAG: $CI_COMMIT_TAG
.container-publish-common-variables: &container-publish-common-variables
DOCKER_REGISTRY: $CI_REGISTRY_IMAGE
DOCKER_REGISTRY_USER: $CI_REGISTRY_USER
DOCKER_REGISTRY_PASSWORD: $CI_REGISTRY_PASSWORD
.publish-image-jib-maven:
image: $MAVEN_IMAGE
<<: *container-publish-common
variables: variables:
DOCKER_REGISTRY: $CI_REGISTRY_IMAGE <<: *container-publish-common-variables
DOCKER_REGISTRY_USER: $CI_REGISTRY_USER
DOCKER_REGISTRY_PASSWORD: $CI_REGISTRY_PASSWORD
MVN_VERSION: "true" MVN_VERSION: "true"
script: script:
- export PARSED_VERSION=$(echo $CI_COMMIT_TAG | sed -r 's/\+/_/g') # Replace + sign since this is not valid in a docker tag
- echo $PARSED_VERSION
- > - >
if [ "${MVN_VERSION}" == "true" ]; then if [ "${MVN_VERSION}" == "true" ]; then
mvn versions:set -DnewVersion=$PARSED_VERSION -DgenerateBackupPoms=false mvn versions:set -DnewVersion=$PARSED_VERSION -DgenerateBackupPoms=false
@ -23,21 +33,15 @@
.publish-image-jib-gradle: .publish-image-jib-gradle:
image: $GRADLE_IMAGE image: $GRADLE_IMAGE
stage: package <<: *container-publish-common
rules:
- if: $CI_COMMIT_TAG
variables: variables:
DOCKER_REGISTRY: $CI_REGISTRY_IMAGE <<: *container-publish-common-variables
DOCKER_REGISTRY_USER: $CI_REGISTRY_USER GRADLE_EXTRA_ARGS: ""
DOCKER_REGISTRY_PASSWORD: $CI_REGISTRY_PASSWORD
before_script:
- export PARSED_VERSION=$(echo $CI_COMMIT_TAG | sed -r 's/\+/_/g') # Replace + sign since this is not valid in a docker tag
- export IMAGE_NAME=$CI_REGISTRY_IMAGE:$PARSED_VERSION
script: script:
- echo $PARSED_VERSION - echo $PARSED_VERSION
- gradlew jib - ./gradlew assemble jib $GRADLE_EXTRA_ARGS
"-DskipTests" "-DskipTests"
"-Djib.to.image=$DOCKER_REGISTRY:$PARSED_VERSION" "-Djib.to.image=$DOCKER_REGISTRY:$PARSED_VERSION""
"-Djib.to.auth.username=$DOCKER_REGISTRY_USER" "-Djib.to.auth.username=$DOCKER_REGISTRY_USER"
"-Djib.to.auth.password=$DOCKER_REGISTRY_PASSWORD" "-Djib.to.auth.password=$DOCKER_REGISTRY_PASSWORD"
@ -45,20 +49,13 @@
image: image:
name: gcr.io/kaniko-project/executor:v1.7.0-debug name: gcr.io/kaniko-project/executor:v1.7.0-debug
entrypoint: [ "" ] entrypoint: [ "" ]
stage: package <<: *container-publish-common
rules:
- if: $CI_COMMIT_TAG
variables: variables:
DOCKER_REGISTRY: $CI_REGISTRY_IMAGE <<: *container-publish-common-variables
DOCKER_REGISTRY_USER: $CI_REGISTRY_USER
DOCKER_REGISTRY_PASSWORD: $CI_REGISTRY_PASSWORD
PROJECT_DIR: $CI_PROJECT_DIR PROJECT_DIR: $CI_PROJECT_DIR
DOCKERFILE_LOCATION: $CI_PROJECT_DIR/Dockerfile DOCKERFILE_LOCATION: $CI_PROJECT_DIR/Dockerfile
CONTEXT_LOCATION: $CI_PROJECT_DIR CONTEXT_LOCATION: $CI_PROJECT_DIR
before_script:
- export PARSED_VERSION=$(echo $CI_COMMIT_TAG | sed -r 's/\+/_/g') # Replace + sign since this is not valid in a docker tag
- export IMAGE_NAME=$CI_REGISTRY_IMAGE:$PARSED_VERSION
script: script:
- mkdir -p /kaniko/.docker - mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$DOCKER_REGISTRY\":{\"username\":\"$DOCKER_REGISTRY_USER\",\"password\":\"$DOCKER_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json - echo "{\"auths\":{\"$DOCKER_REGISTRY\":{\"username\":\"$DOCKER_REGISTRY_USER\",\"password\":\"$DOCKER_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- /kaniko/executor --context $CONTEXT_LOCATION --dockerfile $DOCKERFILE_LOCATION --destination $IMAGE_NAME --skip-tls-verify - /kaniko/executor --context $CONTEXT_LOCATION --dockerfile $DOCKERFILE_LOCATION --destination $CI_REGISTRY_IMAGE:$PARSED_VERSION --skip-tls-verify

View File

@ -0,0 +1,27 @@
:sourcedir: ../../../
= Container-Publish-Snapshot
Dieses Template funktioniert genauso wie das <<_container_publish, Container Publish>> Template.
Es wird jedoch in folgenden Branches ausgeführt.
Dabei sind die Imagenamen der Container abhängig von den Branchnamen.
.Ausführung
|===
|Branch |Container Image name
|DEFAULT BRANCH (master/main) |DOCKER_REGISTRY:latest
|feature/* |$DOCKER_REGISTRY:feature/(Branch-postfix)
|refactor/* |$DOCKER_REGISTRY:refactor/(Branch-postfix)
|===
.Variables
|===
|Name |Description | Default Value
|| Siehe <<_container_publish, Container Publish>> |
|===
.sonar-template
[source,yaml]
----
include::{sourcedir}/container-publish-snapshot.gitlab-ci.yml[]
----

View File

@ -4,16 +4,22 @@
Baut mithilfe von jib oder kaniko ein Docker Image und läd das Image in der Docker Registry des Projekts hoch. Baut mithilfe von jib oder kaniko ein Docker Image und läd das Image in der Docker Registry des Projekts hoch.
Dieser Schritt wird nur ausgeführt, wenn ein Tag gesetzt wird. Dieser Schritt wird nur ausgeführt, wenn ein Tag gesetzt wird.
Wenn das Template ohne Tags benutzt werden soll, müssen die Rules vererbt werden.
Ein Snapshot Template bieten wir hier an: <<_container-publish-snapshot>>
.Variables .Variables
|=== |===
|Name |Description | Default Value |Name |Description | Default Value
|MVN_VERSION | Bestimmt, ob die version von MAVEN gesetzt werden soll. |MVN_VERSION | Bestimmt, ob die version von MAVEN gesetzt werden soll.
Falls das Projekt aus mehreren Poms besteht, kann `before_script:` benutzt werden. | "true" Falls das Projekt aus mehreren Poms besteht, kann `before_script:` benutzt werden. | "true"
|DOCKER_REGISTRY | Definiert die Registry an zu dem das Image veröffentlicht werden soll | $CI_REGISTRY_IMAGE
|DOCKER_REGISTRY_USER | Definiert den User der benutzt werden soll | $CI_REGISTRY_USER
|DOCKER_REGISTRY_PASSWORD | Definiert das Passwort des Benutzers | $CI_REGISTRY_PASSWORD
|=== |===
.sonar-template .sonar-template
[source, yaml] [source,yaml]
---- ----
include::{sourcedir}/container-publish.gitlab-ci.yml[] include::{sourcedir}/container-publish.gitlab-ci.yml[]
---- ----