summaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
blob: 493ae68d29b878e80db3d1c086d2f4cd8378e524 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
---

variables:
  OPENSHIFT_SERVER: hexacab.org:8443
  OPENSHIFT_DOMAIN: apps.hexacab.org
  PROJECT_NAME: leapse
  # Configure this variable in Secure Variables:
  # OPENSHIFT_TOKEN: my.openshift.token

stages:
  - review
  - production
  - cleanup

.deploy: &deploy
  image: ayufan/openshift-cli
  before_script:
    - oc login "${OPENSHIFT_SERVER}" --token="${OPENSHIFT_TOKEN}"
    - oc project "${PROJECT_NAME}-${CI_PROJECT_ID}" 2> /dev/null || oc new-project "${PROJECT_NAME}-${CI_PROJECT_ID}"
  script:
    - "oc get services ${APP} 2> /dev/null || oc new-app ${CI_REPOSITORY_URL}#${CI_COMMIT_REF_NAME} --name=${APP} --strategy=docker && sleep 3 && oc logs -f bc/${APP}"
    - "oc status -v"
    - "oc expose dc ${APP} --port=8080 && oc expose service ${APP} --port=8080 --hostname=${PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}.${OPENSHIFT_DOMAIN}"

review:
  <<: *deploy
  stage: review
  variables:
    APP: review-$CI_COMMIT_REF_NAME
    APP_HOST: $PROJECT_NAME-$CI_ENVIRONMENT_SLUG.$OPENSHIFT_DOMAIN
  environment:
    name: review/$CI_COMMIT_REF_NAME
    url: http://$PROJECT_NAME-$CI_ENVIRONMENT_SLUG.$OPENSHIFT_DOMAIN
    on_stop: stop-review
  only:
    - branches
  except:
    - master

stop-review:
  <<: *deploy
  stage: cleanup
  script:
    - oc delete all -l "app=$APP"
  when: manual
  variables:
    APP: review-$CI_COMMIT_REF_NAME
    GIT_STRATEGY: none
  environment:
    name: review/$CI_COMMIT_REF_NAME
    action: stop
  only:
    - branches
  except:
    - master

production:
  image: debian:stretch
  stage: production
  environment:
    name: production
  only:
    - master
  before_script:
    # install ssh-agent
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    # run ssh-agent
    - eval $(ssh-agent -s)
    # add ssh key stored in SSH_PRIVATE_KEY variable to the agent store
    # see https://gitlab.com/gitlab-org/gitlab-ee/issues/2940 for fixing
    # broken line endings
    - ssh-add <(echo "$SSH_PRIVATE_KEY" | sed 's/\r$//')
  script:
    - apt-get update
    - apt-get install -y --no-install-recommends capistrano
    - cap deploy