Newer
Older
gabriel klawitter
committed
# .gitlab-ci.yml
#
# pipelines can be triggered manually in the web
# setting POLKADOT_BRANCH to v0.2 will result in a poc2 build
# setting DEPLOY_TAG will only deploy the tagged image
gabriel klawitter
committed
- publish
- deploy
gabriel klawitter
committed
# default release in rust:nightly image is stable
image: parity/rust:nightly
variables:
CI_SERVER_NAME: "GitLab CI"
CARGO_HOME: "${CI_PROJECT_DIR}/.cargo"
gabriel klawitter
committed
SUBSTRATE_REPO: "https://github.com/paritytech/substrate.git"
cache:
key: "${CI_JOB_NAME}"
paths:
- ./.cargo/
.collect_artifacts: &collect_artifacts
artifacts:
name: "${CI_JOB_NAME}_${CI_COMMIT_REF_NAME}"
when: on_success
expire_in: 7 days
paths:
gabriel klawitter
committed
- target/release/
gabriel klawitter
committed
# disabled as there are bugs
# before_script:
# - ./scripts/build.sh
gabriel klawitter
committed
# test will be run for ci on the current repo
# for version v0.2 branch tests are located in substrate repository and
# therefore not generically testable
test:rust:release:
stage: test
only:
- triggers
- tags
- master
- schedules
- web
gabriel klawitter
committed
- /^[0-9]+$/
except:
variables:
- $POLKADOT_BRANCH == "v0.2"
- $DEPLOY_TAG
gabriel klawitter
committed
- rust
script:
- time cargo test --all --release --verbose
gabriel klawitter
committed
build:rust:linux:release:
gabriel klawitter
committed
<<: *collect_artifacts
only:
- master
- tags
- web
except:
variables:
- $DEPLOY_TAG
tags:
- rust
gabriel klawitter
committed
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
- >
set -x;
if [ "${POLKADOT_BRANCH}" = "v0.2" ]; then
if [ -z "${TAG}" ]; then
time cargo install --verbose --root ./target/release/ --git "${SUBSTRATE_REPO}" --branch "${POLKADOT_BRANCH}" polkadot;
else
time cargo install --verbose --root ./target/release/ --git "${SUBSTRATE_REPO}" --tag "${TAG}" polkadot;
fi;
mv ./target/release/bin/polkadot ./target/release/polkadot;
rm -d ./target/release/bin;
else
time cargo build --release --verbose;
fi;
set +x
- ./target/release/polkadot --version
dockerize:release:
stage: publish
dependencies:
- build:rust:linux:release
cache: {}
only:
- master
- tags
- web
except:
variables:
- $DEPLOY_TAG
tags:
- shell
variables:
DOCKERFILE: scripts/docker/Dockerfile
CONTAINER_IMAGE: parity/polkadot
before_script:
- test "$Docker_Hub_User_Parity" -a "$Docker_Hub_Pass_Parity"
|| ( echo "no docker credentials provided"; exit 1 )
- docker login -u "$Docker_Hub_User_Parity" -p "$Docker_Hub_Pass_Parity"
- docker info
- VERSION="$(./target/release/polkadot --version | sed -n -r 's/^polkadot ([0-9.]+-[0-9a-f]+)-.*$/\1/p')"
- export VERSION
- echo "Polkadot version = ${VERSION}"
script:
- test -z "${VERSION}" && exit 1
- docker build --tag $CONTAINER_IMAGE:$VERSION --tag $CONTAINER_IMAGE:latest -f $DOCKERFILE ./target/release/
- docker push $CONTAINER_IMAGE:$VERSION
- docker push $CONTAINER_IMAGE:latest
- rm -f ./target/release/polkadot
- echo "${VERSION}" > ./target/release/VERSION
after_script:
- docker logout
# use artifacts here to transport the version to the next stage
gabriel klawitter
committed
.deploy:template: &deploy
stage: deploy
when: manual
cache: {}
retry: 1
image: dtzar/helm-kubectl:$HELM_VERSION
gabriel klawitter
committed
- web
gabriel klawitter
committed
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
- kubernetes
before_script:
- test -z "${DEPLOY_TAG}" &&
test -f ./target/release/VERSION &&
DEPLOY_TAG="$(cat ./target/release/VERSION)"
- test "${DEPLOY_TAG}" || ( echo "Neither DEPLOY_TAG nor VERSION information available"; exit 1 )
script:
- echo "Polkadot version = ${DEPLOY_TAG}"
# or use helm to render the template
- helm template
--values ./scripts/kubernetes/values.yaml
--set image.tag=${DEPLOY_TAG}
./scripts/kubernetes | kubectl apply -f - --dry-run=true
- echo "# polkadot namespace"
- kubectl -n polkadot get all
- echo "# polkadot's nodes' external ip addresses:"
- kubectl get nodes -l node=polkadot
-o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{range @.status.addresses[?(@.type=="ExternalIP")]}{.address}{"\n"}{end}'
- echo "# polkadots' nodes"
- kubectl -n polkadot get pods
-o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.nodeName}{"\n"}{end}'
# have environment:url eventually point to the logs
deploy:ew3:
<<: *deploy
environment:
name: gke-beta-ew3
deploy:ue1:
<<: *deploy
environment:
name: gke-beta-ue1