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
25262015
Prev
Next
Show latest version
1 file
+
1
−
1
Side-by-side
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
25262015
fixed Dockerfile location in the test-image job
· 25262015
Dobromir Palushev
authored
2 years ago
.gitlab-ci.yml
+
89
−
41
Options
workflow
:
workflow
:
rules
:
rules
:
-
if
:
'
$CI_PIPELINE_SOURCE
==
"merge_request_event"'
when
:
always
-
if
:
>-
-
if
:
>-
$CI_PIPELINE_SOURCE == "push"
$CI_COMMIT_BRANCH == "staging" || $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
&& ($CI_COMMIT_BRANCH == "staging" || $CI_COMMIT_BRANCH == "master")
when
:
always
when
:
always
-
when
:
never
-
when
:
never
variables
:
variables
:
DOCKER_VERSION
:
'
20.10.12'
DOCKER_VERSION
:
'
20.10.17'
K8S_NAMESPACE
:
'
devops-s22-deployable'
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}'
CONTAINER_TAG
:
'
${CI_REGISTRY_IMAGE}:${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}'
stages
:
stages
:
-
test
-
test
-
build
-
build
-
release
-
deploy
-
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
stage
:
test
tags
:
tags
:
-
docker-privil
i
ged
-
docker-privil
e
ged
image
:
docker:$DOCKER_VERSION
image
:
docker:$
{
DOCKER_VERSION
}
services
:
services
:
-
name
:
docker:$DOCKER_VERSION-dind
-
name
:
docker:$
{
DOCKER_VERSION
}
-dind
script
:
script
:
-
docker build
-
docker build
--tag "${CONTAINER_TAG}-test"
--tag "${CONTAINER_TAG}-test"
--target=test
--target=test
"./"
"./
app
"
after_script
:
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
stage
:
build
needs
:
needs
:
-
'
job_test-image'
-
'
test-image'
rules
:
-
if
:
$CI_COMMIT_BRANCH != "staging" && $CI_COMMIT_BRANCH != "master"
when
:
'
never'
tags
:
tags
:
-
docker-privil
i
ged
-
docker-privil
e
ged
image
:
docker:$DOCKER_VERSION
image
:
docker:$
{
DOCKER_VERSION
}
services
:
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
:
script
:
-
SERVER_PUBLIC_URL=""
-
docker image build
-
DB_HOST=""
-
docker build
--tag "${CONTAINER_TAG}"
--tag "${CONTAINER_TAG}"
--build-arg JWT_SECRET=${JWT_SECRET}
"./app"
--build-arg SERVER_PUBLIC_URL=${SERVER_PUBLIC_URL}
# - docker image build
--build-arg DB_HOST=${DB_HOST}
# --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 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
:
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
stage
:
deploy
needs
:
needs
:
-
'
job_
build-image'
-
'
build-image'
rules
:
rules
:
-
if
:
$CI_COMMIT_REF_NAME =~ /staging/
-
if
:
$CI_COMMIT_REF_NAME =~ /staging/
when
:
'
always'
when
:
'
always'
variables
:
variables
:
ENVIRONMENT_NAME
:
'
staging'
ENVIRONMENT_NAME
:
'
staging'
-
if
:
$CI_COMMIT_REF_NAME !~ /
stag
in
g
/
-
if
:
$CI_COMMIT_REF_NAME !~ /
ma
in/
when
:
'
always'
when
:
'
always'
variables
:
variables
:
ENVIRONMENT_NAME
:
'
prod'
ENVIRONMENT_NAME
:
'
prod
uction
'
tags
:
tags
:
-
docker
-
docker
image
:
image
:
google/cloud-sdk:${GOOGLE_CLOUD_SDK_IMAGE_VERSION}
name
:
k8s-image
entrypoint
:
[
'
'
]
script
:
script
:
# - IMAGE="${CI_REGISTRY_IMAGE}:${VERSION}"
-
VERSION="${CI_PIPELINE_IID}-${CI_COMMIT_SHORT_SHA}"
-
kubectl apply
-
IMAGE="${CI_REGISTRY_IMAGE}:${VERSION}"
--kubeconfig ${SECRET_KUBECONFIG_PATH}
-
cd "app/k8s-manifests"
--namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
-
kubectl apply secrets.yaml --namespace "${ENVIRONMENT_NAME}-${K8S_NAMESPACE}"
--kustomize -
-
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