summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Gonzalez <ogonzalez@gitlab.com>2019-01-16 09:18:33 +0000
committerFabien Catteau <fcatteau@gitlab.com>2019-01-16 09:18:33 +0000
commit7333775b843dbfb7d23dc007683ee3a5c2892fba (patch)
tree2cf4022d793b8a7608151c42a6bdcf7c7d927b8e
parentbc210a7431ba2592a50562568f76c8a16fb781a0 (diff)
Revisit versioning and release process for license management
-rw-r--r--.gitlab-ci.yml327
-rw-r--r--CHANGELOG.md16
-rw-r--r--Dockerfile.v11
-rw-r--r--VERSION1
4 files changed, 141 insertions, 204 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cbe34ca..a82ff6f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,218 +1,163 @@
-image: alpine:latest
+# When using dind, it's wise to use the overlayfs driver for
+# improved performance.
+variables:
+ DOCKER_DRIVER: overlay2
+ MAJOR: 1
+ TMP_IMAGE: $CI_REGISTRY_IMAGE/tmp:$CI_COMMIT_SHA
+
+services:
+ - docker:stable-dind
stages:
- build
- test
+ - tag
- release
-build:
+build commit:
+ image: docker:stable
stage: build
- image: docker:stable-git
- services:
- - docker:stable-dind
- variables:
- DOCKER_DRIVER: overlay2
script:
- - setup_docker
- - build
- only:
- - branches
+ - docker info
+ - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
+ - docker build -t $TMP_IMAGE .
+ - docker push $TMP_IMAGE
-test:
+code_quality:
+ image: docker:stable
stage: test
+ allow_failure: true
+ script:
+ - export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
+ - docker run
+ --env SOURCE_CODE="$PWD"
+ --volume "$PWD":/code
+ --volume /var/run/docker.sock:/var/run/docker.sock
+ "registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
+ artifacts:
+ reports:
+ codequality: gl-code-quality-report.json
+
+container_scanning:
image: docker:stable
- services:
- - docker:stable-dind
+ stage: test
+ allow_failure: true
script:
- - docker run "$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG:$CI_COMMIT_SHA" test
+ - docker run -d --name db arminc/clair-db:latest
+ - docker run -p 6060:6060 --link db:postgres -d --name clair --restart on-failure arminc/clair-local-scan:v2.0.1
+ - apk add -U wget ca-certificates
+ - docker pull $TMP_IMAGE
+ - wget https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64
+ - mv clair-scanner_linux_amd64 clair-scanner
+ - chmod +x clair-scanner
+ - touch clair-whitelist.yml
+ - while( ! wget -q -O /dev/null http://docker:6060/v1/namespaces ) ; do sleep 1 ; done
+ - retries=0
+ - echo "Waiting for clair daemon to start"
+ - while( ! wget -T 10 -q -O /dev/null http://docker:6060/v1/namespaces ) ; do sleep 1 ; echo -n "." ; if [ $retries -eq 10 ] ; then echo " Timeout, aborting." ; exit 1 ; fi ; retries=$(($retries+1)) ; done
+ - ./clair-scanner -c http://docker:6060 --ip $(hostname -i) -r gl-container-scanning-report.json -l clair.log -w clair-whitelist.yml $TMP_IMAGE || true
+ artifacts:
+ reports:
+ container_scanning: gl-container-scanning-report.json
+
+QA:
+ image: docker:stable
+ stage: test
+ script:
+ - docker info
+ - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
+ - docker pull $TMP_IMAGE
+ - docker run $TMP_IMAGE test
+
+.docker_tag:
+ image: docker:stable
+ stage: tag
+ script:
+ - docker info
+ - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
+ - export SOURCE_IMAGE=$TMP_IMAGE
+ - export TARGET_IMAGE=$CI_REGISTRY_IMAGE:${IMAGE_TAG:-$CI_JOB_NAME}
+ - docker pull $SOURCE_IMAGE
+ - docker tag $SOURCE_IMAGE $TARGET_IMAGE
+ - docker push $TARGET_IMAGE
+
+branch:
+ extends: .docker_tag
+ variables:
+ IMAGE_TAG: $CI_COMMIT_REF_SLUG
only:
- branches
+ except:
+ - master
-release-latest-and-next-version:
- stage: release
- image: docker:stable
- services:
- - docker:stable-dind
+edge:
+ extends: .docker_tag
variables:
- DOCKER_DRIVER: overlay2
- script:
- - setup_docker
- - echo "Logging to GitLab Container Registry with CI credentials..."
- - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- - echo "Pulling Docker image..."
- - docker pull "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG"
- - echo "Tagging image"
- - docker tag "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" "$CI_REGISTRY_IMAGE:latest"
- - echo "Pushing to GitLab Container Registry..."
- - docker push "$CI_REGISTRY_IMAGE:latest"
- - docker tag "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" "$CI_REGISTRY_IMAGE:$(cat VERSION)"
- - echo "Pushing to GitLab Container Registry..."
- - docker push "$CI_REGISTRY_IMAGE:$(cat VERSION)"
+ IMAGE_TAG: edge
only:
- master
-release-stable:
+version:
+ extends: .docker_tag
+ before_script:
+ - export IMAGE_TAG=${CI_COMMIT_TAG/v/}
+ only:
+ - tags
+ when: manual
+ allow_failure: false
+
+.release:
+ extends: .docker_tag
stage: release
- image: docker:stable
- services:
- - docker:stable-dind
- variables:
- DOCKER_DRIVER: overlay2
- script:
- - setup_docker
- - echo "Logging to GitLab Container Registry with CI credentials..."
- - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- - echo "Pulling Docker image..."
- - docker pull "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG"
- - echo "Tagging image"
- - docker tag "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
- - echo "Pushing to GitLab Container Registry..."
- - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
only:
- - /^\d+-\d+-stable$/
+ - tags
-code_quality:
- image: docker:stable
+major:
+ extends: .release
variables:
- DOCKER_DRIVER: overlay2
- allow_failure: true
- services:
- - docker:stable-dind
- script:
- - setup_docker
- - codeclimate
- artifacts:
- paths: [gl-code-quality-report.json]
+ IMAGE_TAG: $MAJOR
-container_scanning:
- image: docker:stable
+latest:
+ extends: .release
variables:
- DOCKER_DRIVER: overlay2
- allow_failure: true
- services:
- - docker:stable-dind
- script:
- - setup_docker
- - sast_container
- artifacts:
- paths: [gl-container-scanning-report.json]
-
-# ---------------------------------------------------------------------------
-
-.auto_devops: &auto_devops |
- # Auto DevOps variables and functions
- [[ "$TRACE" ]] && set -x
- auto_database_url=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${CI_ENVIRONMENT_SLUG}-postgres:5432/${POSTGRES_DB}
- export DATABASE_URL=${DATABASE_URL-$auto_database_url}
- export CI_APPLICATION_REPOSITORY=$CI_REGISTRY_IMAGE/$CI_COMMIT_REF_SLUG
- export CI_APPLICATION_TAG=$CI_COMMIT_SHA
- export CI_CONTAINER_NAME=ci_job_build_${CI_JOB_ID}
- export TILLER_NAMESPACE=$KUBE_NAMESPACE
- # Extract "MAJOR.MINOR" from CI_SERVER_VERSION and generate "MAJOR-MINOR-stable" for Security Products
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
-
- function sast_container() {
- if [[ -n "$CI_REGISTRY_USER" ]]; then
- echo "Logging to GitLab Container Registry with CI credentials..."
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- echo ""
- fi
-
- docker run -d --name db arminc/clair-db:latest
- docker run -p 6060:6060 --link db:postgres -d --name clair --restart on-failure arminc/clair-local-scan:v2.0.1
- apk add -U wget ca-certificates
- docker pull ${CI_APPLICATION_REPOSITORY}:${CI_APPLICATION_TAG}
- wget https://github.com/arminc/clair-scanner/releases/download/v8/clair-scanner_linux_amd64
- mv clair-scanner_linux_amd64 clair-scanner
- chmod +x clair-scanner
- touch clair-whitelist.yml
- retries=0
- echo "Waiting for clair daemon to start"
- while( ! wget -T 10 -q -O /dev/null http://docker:6060/v1/namespaces ) ; do sleep 1 ; echo -n "." ; if [ $retries -eq 10 ] ; then echo " Timeout, aborting." ; exit 1 ; fi ; retries=$(($retries+1)) ; done
- ./clair-scanner -c http://docker:6060 --ip $(hostname -i) -r gl-sast-container-report.json -l clair.log -w clair-whitelist.yml ${CI_APPLICATION_REPOSITORY}:${CI_APPLICATION_TAG} || true
- }
-
- function codeclimate() {
- docker run --env SOURCE_CODE="$PWD" \
- --volume "$PWD":/code \
- --volume /var/run/docker.sock:/var/run/docker.sock \
- "registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
- }
-
- function sast() {
- case "$CI_SERVER_VERSION" in
- *-ee)
-
- # Deprecation notice for CONFIDENCE_LEVEL variable
- if [ -z "$SAST_CONFIDENCE_LEVEL" -a "$CONFIDENCE_LEVEL" ]; then
- SAST_CONFIDENCE_LEVEL="$CONFIDENCE_LEVEL"
- echo "WARNING: CONFIDENCE_LEVEL is deprecated and MUST be replaced with SAST_CONFIDENCE_LEVEL"
- fi
-
- docker run --env SAST_CONFIDENCE_LEVEL="${SAST_CONFIDENCE_LEVEL:-3}" \
- --volume "$PWD:/code" \
- --volume /var/run/docker.sock:/var/run/docker.sock \
- "registry.gitlab.com/gitlab-org/security-products/sast:$SP_VERSION" /app/bin/run /code
- ;;
- *)
- echo "GitLab EE is required"
- ;;
- esac
- }
-
- function dependency_scanning() {
- case "$CI_SERVER_VERSION" in
- *-ee)
- docker run --env DEP_SCAN_DISABLE_REMOTE_CHECKS="${DEP_SCAN_DISABLE_REMOTE_CHECKS:-false}" \
- --volume "$PWD:/code" \
- --volume /var/run/docker.sock:/var/run/docker.sock \
- "registry.gitlab.com/gitlab-org/security-products/dependency-scanning:$SP_VERSION" /code
- ;;
- *)
- echo "GitLab EE is required"
- ;;
- esac
- }
-
- function setup_docker() {
- if ! docker info &>/dev/null; then
- if [ -z "$DOCKER_HOST" -a "$KUBERNETES_PORT" ]; then
- export DOCKER_HOST='tcp://localhost:2375'
- fi
- fi
- }
-
- function build() {
-
- if [[ -n "$CI_REGISTRY_USER" ]]; then
- echo "Logging to GitLab Container Registry with CI credentials..."
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
- echo ""
- fi
-
- if [[ -f Dockerfile ]]; then
- echo "Building Dockerfile-based application..."
- docker build -t "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" .
- else
- echo "Building Heroku-based application using gliderlabs/herokuish docker image..."
- docker run -i --name="$CI_CONTAINER_NAME" -v "$(pwd):/tmp/app:ro" gliderlabs/herokuish /bin/herokuish buildpack build
- docker commit "$CI_CONTAINER_NAME" "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG"
- docker rm "$CI_CONTAINER_NAME" >/dev/null
- echo ""
-
- echo "Configuring $CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG docker image..."
- docker create --expose 5000 --env PORT=5000 --name="$CI_CONTAINER_NAME" "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG" /bin/herokuish procfile start web
- docker commit "$CI_CONTAINER_NAME" "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG"
- docker rm "$CI_CONTAINER_NAME" >/dev/null
- echo ""
- fi
-
- echo "Pushing to GitLab Container Registry..."
- docker push "$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG"
- echo ""
- }
-
-before_script:
- - *auto_devops
+ DOCKERFILE: Dockerfile.v1
+11-7-stable:
+ extends: .release
+ variables:
+ DOCKERFILE: Dockerfile.v1
+
+11-6-stable:
+ extends: .release
+ variables:
+ DOCKERFILE: Dockerfile.v1
+
+11-5-stable:
+ extends: .release
+ variables:
+ DOCKERFILE: Dockerfile.v1
+
+11-4-stable:
+ extends: .release
+ variables:
+ DOCKERFILE: Dockerfile.v1
+11-3-stable:
+ extends: .release
+ variables:
+ DOCKERFILE: Dockerfile.v1
+
+11-2-stable:
+ extends: .release
+ variables:
+ DOCKERFILE: Dockerfile.v1
+
+11-1-stable:
+ extends: .release
+ variables:
+ DOCKERFILE: Dockerfile.v1
+
+11-0-stable:
+ extends: .release
+ variables:
+ DOCKERFILE: Dockerfile.v1
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7febac3..1f793b6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,21 +1,13 @@
# GitLab License management changelog
-## 11-7-stable
-- Bump LicenseFinder to 5.5.2
-
-## 11-6-stable
+## 1.2.0
-## 11-5-stable
+- Bump LicenseFinder to 5.5.2
-## 11-4-stable
+## 1.1.0
- Allow `SETUP_CMD` to skip auto-detection of build tool
-## 11-3-stable
-
-## 11-2-stable
-
-## 11-1-stable
+## 1.0.0
-## 11-0-stable
- Initial release
diff --git a/Dockerfile.v1 b/Dockerfile.v1
new file mode 100644
index 0000000..01b4c16
--- /dev/null
+++ b/Dockerfile.v1
@@ -0,0 +1 @@
+FROM registry.gitlab.com/gonzoyumo/license-management:1
diff --git a/VERSION b/VERSION
deleted file mode 100644
index eb11914..0000000
--- a/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-11-7-stable \ No newline at end of file