Skip to content
Snippets Groups Projects
.gitlab-ci.yml 1.95 KiB
Newer Older
schnarkus's avatar
schnarkus committed
---
schnarkus's avatar
schnarkus committed
    - if: $CI_PIPELINE_SOURCE == "merge_request_event" || ($CI_PIPELINE_SOURCE == "push" && ($CI_COMMIT_BRANCH == "main" || $CI_COMMIT_BRANCH == "prod" || $CI_COMMIT_BRANCH == "dev"))
variables:
schnarkus's avatar
schnarkus committed
  version: 0.0.$CI_PIPELINE_IID
stages:
  - test
  - build
  - publish
schnarkus's avatar
schnarkus committed
test_job:
  stage: test
  image: public.ecr.aws/docker/library/golang:1.21
schnarkus's avatar
schnarkus committed
    - go get -t ./...
    - go test -race -v ./...
build_job:
  stage: build
schnarkus's avatar
schnarkus committed
  rules:
schnarkus's avatar
schnarkus committed
    - if: $CI_COMMIT_REF_NAME =~ /prod|dev/
schnarkus's avatar
schnarkus committed
      when: always
schnarkus's avatar
schnarkus committed
  image: public.ecr.aws/docker/library/golang:1.21
  script: |
schnarkus's avatar
schnarkus committed
    echo "$DB_PASSWORD" > db_pass
schnarkus's avatar
schnarkus committed
    GOARCH=amd64 GOOS=linux CGO_ENABLED=0 go build -ldflags "-X webservice/configuration.version=0.0.1" -o artifact.bin ./*.go
schnarkus's avatar
schnarkus committed
    cd metrics
    go mod tidy
    go build -o ../ping_server server.go
schnarkus's avatar
schnarkus committed
  artifacts:
    paths:
schnarkus's avatar
schnarkus committed
      - db_pass
schnarkus's avatar
schnarkus committed
      - artifact.bin
      - ping_server
schnarkus's avatar
schnarkus committed
    expire_in: 5 min
schnarkus's avatar
schnarkus committed

schnarkus's avatar
schnarkus committed
publish_job:
  stage: publish
schnarkus's avatar
schnarkus committed
    - if: $CI_COMMIT_REF_NAME =~ /prod|dev/
  image: docker:latest
  services:
    - docker:dind
schnarkus's avatar
schnarkus committed
  tags:
    - docker-privileged
schnarkus's avatar
schnarkus committed
  dependencies:
schnarkus's avatar
schnarkus committed
    - build_job
schnarkus's avatar
schnarkus committed
    - docker build -t $CI_REGISTRY_IMAGE:$version -f Containerfile .
    - docker tag $CI_REGISTRY_IMAGE:$version $CI_REGISTRY_IMAGE:latest
    - if [[ "$CI_COMMIT_BRANCH" == "prod" ]]; then
      docker tag $CI_REGISTRY_IMAGE:$version $CI_REGISTRY_IMAGE:prod;
      elif [[ "$CI_COMMIT_BRANCH" == "dev" ]]; then
      docker tag $CI_REGISTRY_IMAGE:$version $CI_REGISTRY_IMAGE:dev;
      fi
schnarkus's avatar
schnarkus committed
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
    - docker push $CI_REGISTRY_IMAGE:$version
    - docker push $CI_REGISTRY_IMAGE:latest
schnarkus's avatar
schnarkus committed
    - if [[ "$CI_COMMIT_BRANCH" == "prod" ]]; then
      docker push $CI_REGISTRY_IMAGE:prod;
      elif [[ "$CI_COMMIT_BRANCH" == "dev" ]]; then
      docker push $CI_REGISTRY_IMAGE:dev;
      fi
schnarkus's avatar
schnarkus committed
    - docker logout $CI_REGISTRY