variables: DOCKER_TLS_CERTDIR: "" GIT_STRATEGY: clone REGISTRY_USER: chembl/research APPLICATION: lina-web RELEASE_IMAGE: $CI_REGISTRY/$REGISTRY_USER/$APPLICATION:$CI_BUILD_REF_NAME DOCKER_IMAGE: $CI_REGISTRY/$REGISTRY_USER/$APPLICATION DOCKER_DRIVER: overlay CONFIGS_FOLDER: run_config # Config staging ENV_STAGING_FILE_PATH: ${CONFIGS_FOLDER}/staging/.env INGRESS_STAGING_FILE_PATH: ${CONFIGS_FOLDER}/staging/ingress.yml # Config prod hx ENV_PROD_HX_FILE_PATH: ${CONFIGS_FOLDER}/prod_hx/.env INGRESS_PROD_HX_FILE_PATH: ${CONFIGS_FOLDER}/prod_hx/ingress.yml # Config prod hh ENV_PROD_HH_FILE_PATH: ${CONFIGS_FOLDER}/prod_hh/.env INGRESS_PROD_HH_FILE_PATH: ${CONFIGS_FOLDER}/prod_hh/ingress.yml stages: - build - test - prepare_config - deploy build: image: name: docker/compose:1.25.5 entrypoint: ["/bin/sh", "-c"] stage: build only: - staging services: - docker:dind tags: - dind variables: DOCKER_HOST: tcp://docker:2375 script: - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY - echo Building ${DOCKER_IMAGE}:${CI_COMMIT_SHORT_SHA} - docker-compose build development - echo Deploying ${DOCKER_IMAGE}:${CI_COMMIT_SHORT_SHA} - docker push ${DOCKER_IMAGE}:${CI_COMMIT_SHORT_SHA} # build-prod: # image: # name: docker/compose:1.25.5 # entrypoint: ["/bin/sh", "-c"] # stage: build # only: # - master # # - master # variables: # DOCKER_HOST: tcp://docker:2375 # script: # - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY # - echo Building ${DOCKER_IMAGE}:${CI_COMMIT_SHORT_SHA} # - docker-compose build production # - echo Deploying ${DOCKER_IMAGE}:${CI_COMMIT_SHORT_SHA} # - docker push ${DOCKER_IMAGE}:${CI_COMMIT_SHORT_SHA} unit-tests: stage: test script: - echo "ToDo UNIT TESTS" prepare_config_staging: stage: prepare_config image: name: alpine/git entrypoint: ["/bin/sh", "-c"] only: - staging script: - set -x - rm -rf ${CONFIGS_FOLDER} || true - mkdir -p ${CONFIGS_FOLDER} - git clone https://${CONFIG_DEPLOY_GITLAB_USERNAME}:${CONFIG_DEPLOY_GITLAB_TOKEN}@${CONFIGURATIONS_REPO} ${CONFIGS_FOLDER} tags: - docker artifacts: paths: - ${ENV_STAGING_FILE_PATH} - ${INGRESS_STAGING_FILE_PATH} deploy-dev-hx: image: name: lachlanevenson/k8s-kubectl:latest entrypoint: ["/bin/sh", "-c"] only: - dev stage: deploy script: - set -x - echo "$KUBE_CA_PEM_HX" > "$(pwd)/kube.ca.pem" - kubectl config set-cluster ${KUBE_CLUS_NAME_HX} --server="${KUBE_URL_HX}" --certificate-authority="$(pwd)/kube.ca.pem" - kubectl config set-credentials ${KUBE_USER_HX} --token="${KUBE_TOKEN_HX}" - kubectl config set-context ${CHEMBL_NS_STAGING} --cluster=${KUBE_CLUS_NAME_HX} --user=${KUBE_USER_HX} - kubectl config use-context ${CHEMBL_NS_STAGING} - echo ${CHEMBL_NS_STAGING} ${KUBE_URL_HX} ${KUBE_CLUS_NAME_HX} ${KUBE_USER_HX} - kubectl get pods -n ${CHEMBL_NS_STAGING} - kubectl create secret generic ${ENV_SECRET_NAME_STAGING} --from-file=.env=${ENV_STAGING_FILE_PATH} -o yaml -n ${CHEMBL_NS_STAGING} --dry-run=client | kubectl apply -f - - cat ${CONFIG_STAGING_FILE_PATH} - echo ${KUBE_NAMESPACE_DEV} ${KUBE_URL_HH} ${KUBE_CLUS_NAME_HX} ${KUBE_USER_HX} - kubectl get pods -n ${KUBE_NAMESPACE_DEV} - sed -i "s~~${CI_COMMIT_SHORT_SHA}~" k8s-deployment.yml - sed -i "s~~${DOCKER_IMAGE}~" k8s-deployment.yml - sed -i "s~~${HTTP_PROXY_HX}~g" k8s-deployment.yaml - sed -i "s~~${HTTPS_PROXY_HX}~g" k8s-deployment.yaml - sed -i "s~~${NO_PROXY_HX_DEFAULT}~g" k8s-deployment.yaml - sed -i "s~~${RUN_CONFIG_SECRET_NAME_STAGING}~g" k8s-deployment.yaml - kubectl apply -n ${KUBE_NAMESPACE_DEV} -f k8s-deployment.yml - cat ${INGRESS_STAGING_FILE_PATH} - kubectl apply -n ${CHEMBL_NS_STAGING} -f ${INGRESS_STAGING_FILE_PATH} prepare_config_prod: stage: prepare_config image: name: alpine/git entrypoint: ["/bin/sh", "-c"] only: - master script: - set -x - rm -rf ${CONFIGS_FOLDER} || true - mkdir -p ${CONFIGS_FOLDER} - git clone https://${CONFIG_DEPLOY_GITLAB_USERNAME}:${CONFIG_DEPLOY_GITLAB_TOKEN}@${CONFIGURATIONS_REPO} ${CONFIGS_FOLDER} tags: - docker artifacts: paths: - ${ENV_PROD_HX_FILE_PATH} - ${INGRESS_PROD_HX_FILE_PATH} - ${ENV_PROD_HH_FILE_PATH} - ${INGRESS_PROD_HH_FILE_PATH} deploy-prod-hx: image: name: lachlanevenson/k8s-kubectl:latest entrypoint: ["/bin/sh", "-c"] stage: deploy only: - master script: - echo $KUBE_URL_HX - echo "$KUBE_CA_PEM_HX" > "$(pwd)/kube.ca.pem" - kubectl config set-cluster ${KUBE_CLUS_NAME_HX} --server="${KUBE_URL_HX}" --certificate-authority="$(pwd)/kube.ca.pem" - kubectl config set-credentials ${KUBE_USER_HX} --token="${KUBE_TOKEN_HX}" - kubectl config set-context ${KUBE_NAMESPACE_PROD} --cluster=${KUBE_CLUS_NAME_HX} --user=${KUBE_USER_HX} - kubectl config use-context ${KUBE_NAMESPACE_PROD} - kubectl create secret generic ${RUN_CONFIG_SECRET_NAME_PROD_HX} --from-file=.env=${ENV_PROD_HX_FILE_PATH} -o yaml -n ${CHEMBL_NS_} --dry-run=client | kubectl apply -f - - cat ${CONFIG_STAGING_FILE_PATH} - echo ${KUBE_NAMESPACE_DEV} ${KUBE_URL_HH} ${KUBE_CLUS_NAME_HX} ${KUBE_USER_HX} - kubectl get pods -n ${KUBE_NAMESPACE_DEV} - sed -i "s~~${CI_COMMIT_SHORT_SHA}~" k8s-deployment.yml - sed -i "s~~${DOCKER_IMAGE}~" k8s-deployment.yml - sed -i "s~~${HTTP_PROXY_HX}~g" k8s-deployment.yaml - sed -i "s~~${HTTPS_PROXY_HX}~g" k8s-deployment.yaml - sed -i "s~~${NO_PROXY_HX_DEFAULT}~g" k8s-deployment.yaml - sed -i "s~~${RUN_CONFIG_SECRET_NAME_STAGING}~g" k8s-deployment.yaml - kubectl apply -n ${KUBE_NAMESPACE_DEV} -f k8s-deployment.yml - cat ${INGRESS_STAGING_FILE_PATH} - kubectl apply -n ${CHEMBL_NS_STAGING} -f ${INGRESS_STAGING_FILE_PATH} # deploy-prod-hh: # image: # name: lachlanevenson/k8s-kubectl:latest # entrypoint: ["/bin/sh", "-c"] # stage: deploy # script: # - echo $KUBE_URL_HH # - echo "$KUBE_CA_PEM_HH" > "$(pwd)/kube.ca.pem" # - kubectl config set-cluster ${KUBE_CLUS_NAME_HH} --server="${KUBE_URL_HH}" --certificate-authority="$(pwd)/kube.ca.pem" # - kubectl config set-credentials ${KUBE_USER_HH} --token="${KUBE_TOKEN_HH}" # - kubectl config set-context ${KUBE_NAMESPACE_PROD} --cluster=${KUBE_CLUS_NAME_HH} --user=${KUBE_USER_HH} # - kubectl config use-context ${KUBE_NAMESPACE_PROD} # - echo ${KUBE_NAMESPACE_DEV} ${KUBE_URL_HH} ${KUBE_CLUS_NAME_HH} ${KUBE_USER_HH} # - kubectl get pods -n ${KUBE_NAMESPACE_PROD} # - sed -i "s~~${CI_COMMIT_SHORT_SHA}~" k8s-deployment.yml # - sed -i "s~~${DOCKER_IMAGE}~" k8s-deployment.yml # - kubectl apply -n ${KUBE_NAMESPACE_PROD} -f k8s-deployment.yml # when: manual # only: # - master # after_script: # - echo "End of script"