Skip to content
Snippets Groups Projects
.gitlab-ci.yml 2.61 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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}