Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
ss22-devops-project-app
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Dobromir Palushev
ss22-devops-project-app
Merge requests
!4
pipeline multiple updates
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
pipeline multiple updates
just-a-test
into
staging
Overview
0
Commits
6
Pipelines
0
Changes
1
Merged
Dobromir Palushev
requested to merge
just-a-test
into
staging
2 years ago
Overview
0
Commits
6
Pipelines
0
Changes
1
Expand
updated workflow rules
updated job names
updated container versions
added a template for gke-initialization
0
0
Merge request reports
Viewing commit
cb0490d9
Prev
Next
Show latest version
1 file
+
2
−
2
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
cb0490d9
fixed job runner's tag
· cb0490d9
Dobromir Palushev
authored
2 years ago
.gitlab-ci.yml
+
89
−
41
Options
workflow
:
rules
:
-
if
:
'
$CI_PIPELINE_SOURCE
==
"merge_request_event"'
when
:
always
-
if
:
>-
$CI_PIPELINE_SOURCE == "push"
&& ($CI_COMMIT_BRANCH == "staging" || $CI_COMMIT_BRANCH == "master")
$CI_COMMIT_BRANCH == "staging" || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when
:
always
-
when
:
never
variables
:
DOCKER_VERSION
:
'
20.10.12'
K8S_NAMESPACE
:
'
devops-s22-deployable'
DOCKER_VERSION
:
'
20.10.17'
K8S_VERSION
:
'
1.24'
GOOGLE_CLOUD_SDK_IMAGE_VERSION
:
'
400.0.0'
K8S_NAMESPACE
:
'
todoapp-devops'
CONTAINER_TAG
:
'
${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}'
stages
:
-
test
-
build
-
release
-
deploy
job_test-image
:
.gke-initialization
:
before_script
:
-
echo $BASE64_GOOGLE_CREDENTIALS | base64 -d > ~/service_account.json
-
gcloud auth activate-service-account --key-file ~/service_account.json
-
gcloud config set project ${GCP_PROJECT_ID}
-
gcloud config set compute/zone ${GCP_COMPUTE_REGION}
-
gcloud container clusters get-credentials ${GCP_PROJECT_ID}-gke
test-image
:
stage
:
test
tags
:
-
docker-privil
i
ged
image
:
docker:$DOCKER_VERSION
-
docker-privil
e
ged
image
:
docker:$
{
DOCKER_VERSION
}
services
:
-
name
:
docker:$DOCKER_VERSION-dind
-
name
:
docker:$
{
DOCKER_VERSION
}
-dind
script
:
-
docker build
--tag "${CONTAINER_TAG}-test"
--target=test
"./"
"./
app
"
after_script
:
-
docker image rm --force "${C
I_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}
"
-
docker image rm --force "${C
ONTAINER_TAG}-test
"
job_
build-image
:
build-image
:
stage
:
build
needs
:
-
'
job_test-image'
rules
:
-
if
:
$CI_COMMIT_BRANCH != "staging" && $CI_COMMIT_BRANCH != "master"
when
:
'
never'
-
'
test-image'
tags
:
-
docker-privil
i
ged
image
:
docker:$DOCKER_VERSION
-
docker-privil
e
ged
image
:
docker:$
{
DOCKER_VERSION
}
services
:
-
name
:
docker:$DOCKER_VERSION-dind
-
name
:
docker:${DOCKER_VERSION}-dind
before_script
:
-
docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
script
:
-
SERVER_PUBLIC_URL=""
-
DB_HOST=""
-
docker build
-
docker image build
--tag "${CONTAINER_TAG}"
--build-arg JWT_SECRET=${JWT_SECRET}
--build-arg SERVER_PUBLIC_URL=${SERVER_PUBLIC_URL}
--build-arg DB_HOST=${DB_HOST}
"./"
"./app"
# - docker image build
# --tag "${CONTAINER_TAG}-google-sdk"
# "./gcloud-image"
-
docker push "${CONTAINER_TAG}"
# - docker push "${CONTAINER_TAG}-google-sdk"
after_script
:
-
docker image rm --force "${CONTAINER_TAG}"
# - docker image rm --force "${CONTAINER_TAG}-google-sdk"
create-release_image
:
stage
:
release
rules
:
-
if
:
$CI_COMMIT_REF_NAME =~ /main/
when
:
'
always'
tags
:
-
docker-privileged
image
:
docker:${DOCKER_VERSION}
services
:
-
name
:
docker:${DOCKER_VERSION}-dind
before_script
:
-
docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY}
-
docker push "${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}"
-
docker pull "${CONTAINER_TAG}"
script
:
-
VERSION=$(cat ./app/client/package.json | docker run --interactive stedolan/jq --raw-output '.version')
-
docker tag "${CONTAINER_TAG}" "${CI_REGISTRY_IMAGE}:${VERSION}"
-
docker push "${CI_REGISTRY_IMAGE}:${VERSION}"
after_script
:
-
docker image rm --force "${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}"
-
docker image rm --force
$(docker images --format '{{.Repository}}{{.Tag}}' | grep '${CI_REGISTRY_IMAGE}')
# create-release_tag:
# stage: release
# needs:
# - 'create-release_image'
# rules:
# - if: $CI_COMMIT_REF_NAME =~ /main/
# when: 'always'
# tags:
# - docker-privileged
# image: docker:${DOCKER_VERSION}-git
# services:
# - name: docker:${DOCKER_VERSION}-dind
# script:
# - VERSION=$(cat ./src/package.json | docker run --interactive stedolan/jq --raw-output '.version')
# - echo ${VERSION}
# #- git tag "v${VERSION}" && git push origin "v${VERSION}"
job_deploy-image
:
deploy-image
:
extends
:
.gke-initialization
stage
:
deploy
needs
:
-
'
job_
build-image'
-
'
build-image'
rules
:
-
if
:
$CI_COMMIT_REF_NAME =~ /staging/
when
:
'
always'
variables
:
ENVIRONMENT_NAME
:
'
staging'
-
if
:
$CI_COMMIT_REF_NAME !~ /
stag
in
g
/
-
if
:
$CI_COMMIT_REF_NAME !~ /
ma
in/
when
:
'
always'
variables
:
ENVIRONMENT_NAME
:
'
prod'
ENVIRONMENT_NAME
:
'
prod
uction
'
tags
:
-
docker
image
:
name
:
k8s-image
entrypoint
:
[
'
'
]
image
:
google/cloud-sdk:${GOOGLE_CLOUD_SDK_IMAGE_VERSION}
script
:
# - IMAGE="${CI_REGISTRY_IMAGE}:${VERSION}"
-
kubectl apply
--kubeconfig ${SECRET_KUBECONFIG_PATH}
--namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
--kustomize -
-
VERSION="${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}"
-
IMAGE="${CI_REGISTRY_IMAGE}:${VERSION}"
-
cd "app/k8s-manifests"
-
kubectl apply secrets.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
-
kubectl apply gitlab-registry-credentials.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
-
kubectl apply configmap.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
-
kubectl apply deployment.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
-
kubectl apply service.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
-
kubectl apply ingress.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
Loading