Skip to content
Snippets Groups Projects
.gitlab-ci.yml 2.61 KiB
Newer Older
Dominik Hebeler's avatar
Dominik Hebeler committed
variables:
Dominik Hebeler's avatar
Dominik Hebeler committed
  NODE_IMAGE: node:19-bullseye
Dominik Hebeler's avatar
Dominik Hebeler committed
  DOCKER_HOST: "tcp://docker-dind.gitlab-suma:2375"
  DOCKER_BUILD_IMAGE: docker:20.10.15
  DOCKER_IMAGE_NAME: keymanager
  DOCKER_TAG_NAME: $CI_COMMIT_SHA
Dominik Hebeler's avatar
Dominik Hebeler committed
  HELM_RELEASE_NAME: $CI_COMMIT_BRANCH
  KUBERNETES_NAMESPACE: keymanager
Dominik Hebeler's avatar
Dominik Hebeler committed
  KUBERNETES_DEPLOY_IMAGE: alpine/k8s:1.24.4

stages:
  - build
Dominik Hebeler's avatar
Dominik Hebeler committed
npm_deps:
  stage: build
  image: ${NODE_IMAGE}
  variables:
Dominik Hebeler's avatar
Dominik Hebeler committed
    npm_config_cache: ${CI_PROJECT_DIR}/pass/.npm
Dominik Hebeler's avatar
Dominik Hebeler committed
  cache:
    key: npm-cache
    paths:
Dominik Hebeler's avatar
Dominik Hebeler committed
      - pass/.npm
Dominik Hebeler's avatar
Dominik Hebeler committed
  artifacts:
    public: false
    paths:
Dominik Hebeler's avatar
Dominik Hebeler committed
      - pass/node_modules
Dominik Hebeler's avatar
Dominik Hebeler committed
  script:
Dominik Hebeler's avatar
Dominik Hebeler committed
    - cd pass
Dominik Hebeler's avatar
Dominik Hebeler committed
    - npm i
Dominik Hebeler's avatar
Dominik Hebeler committed
    - chown -R 1000:1000 node_modules
Dominik Hebeler's avatar
Dominik Hebeler committed
build:
  stage: build
  image: ${DOCKER_BUILD_IMAGE}
Dominik Hebeler's avatar
Dominik Hebeler committed
  needs:
    - job: npm_deps
      artifacts: true
Dominik Hebeler's avatar
Dominik Hebeler committed
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
Dominik Hebeler's avatar
Dominik Hebeler committed
    - docker build --network=host -t ${CI_REGISTRY_IMAGE}/${DOCKER_IMAGE_NAME}:${DOCKER_TAG_NAME} -f ./build/pass/Dockerfile .
Dominik Hebeler's avatar
Dominik Hebeler committed
    - docker push ${CI_REGISTRY_IMAGE}/${DOCKER_IMAGE_NAME}:${DOCKER_TAG_NAME}
  after_script:
    - docker logout $CI_REGISTRY
Dominik Hebeler's avatar
Dominik Hebeler committed

update_secret:
  stage: build
  image: ${KUBERNETES_DEPLOY_IMAGE}
  before_script:
    - kubectl config use-context open-source/metager-keymanager:gitlab-agent
  script: |
    kubectl -n ${KUBERNETES_NAMESPACE} create secret generic ${HELM_RELEASE_NAME} \
      --from-file=production.json=${PRODUCTION_CONFIG} \
      --dry-run=client \
      --save-config \
      -o yaml | \
      kubectl apply -f -
    kubectl -n ${KUBERNETES_NAMESPACE} create secret generic ${HELM_RELEASE_NAME}-backuprsa \
      --from-file=id_rsa=${BACKUP_ID_RSA} \
      --from-file=known_hosts=${BACKUP_KNOWN_HOSTS} \
      --dry-run=client \
      --save-config \
      -o yaml | \
      kubectl apply -f -
    kubectl -n ${KUBERNETES_NAMESPACE} create secret generic ${HELM_RELEASE_NAME}-backupenv \
      --from-env-file=${BACKUP_ENV} \
      --dry-run=client \
      --save-config \
      -o yaml | \
      kubectl apply -f -

deploy:
  stage: deploy
  image: ${KUBERNETES_DEPLOY_IMAGE}
  before_script:
    - kubectl config use-context open-source/metager-keymanager:gitlab-agent
  script: |
Dominik Hebeler's avatar
Dominik Hebeler committed
    kubectl -n ${KUBERNETES_NAMESPACE} delete --ignore-not-found job keymanager-migration-job
    helm -n ${KUBERNETES_NAMESPACE} upgrade --install ${HELM_RELEASE_NAME} chart/ \
      --set application.secretName=${HELM_RELEASE_NAME} \
      --set image.repository=${CI_REGISTRY_IMAGE}/${DOCKER_IMAGE_NAME} \
Dominik Hebeler's avatar
Dominik Hebeler committed
      --set image.tag=${DOCKER_TAG_NAME} \
Dominik Hebeler's avatar
Dominik Hebeler committed
      --set namespace=${KUBERNETES_NAMESPACE}