Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
controller
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Code review analytics
Issue analytics
Insights
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
TFS
controller
Commits
e8421ced
Commit
e8421ced
authored
3 years ago
by
Sergio Gonzalez Diaz
Browse files
Options
Downloads
Patches
Plain Diff
gitlab-ci.yml_generator.py
parent
b68c04f3
No related branches found
No related tags found
1 merge request
!54
Release 2.0.0
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/gitlab-ci.yml_generator.py
+27
-89
27 additions, 89 deletions
src/gitlab-ci.yml_generator.py
with
27 additions
and
89 deletions
src/gitlab-ci.yml_generator.py
+
27
−
89
View file @
e8421ced
...
@@ -37,7 +37,11 @@ build {microservice}:
...
@@ -37,7 +37,11 @@ build {microservice}:
- docker build -t
"
$IMAGE_NAME:$IMAGE_TAG
"
-f ./src/$IMAGE_NAME/Dockerfile ./src/
- docker build -t
"
$IMAGE_NAME:$IMAGE_TAG
"
-f ./src/$IMAGE_NAME/Dockerfile ./src/
- docker tag
"
$IMAGE_NAME:$IMAGE_TAG
"
"
$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
"
- docker tag
"
$IMAGE_NAME:$IMAGE_TAG
"
"
$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
"
- docker push
"
$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
"
- docker push
"
$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
"
after_script:
- docker rmi $(docker images --quiet --filter=dangling=true)
rules:
rules:
- if:
'
$CI_PIPELINE_SOURCE ==
"
merge_request_event
"
&& ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME ==
"
develop
"
|| $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)
'
- if:
'
$CI_PIPELINE_SOURCE ==
"
push
"
&& $CI_COMMIT_BRANCH ==
"
develop
"'
- changes:
- changes:
- src/$IMAGE_NAME/*.{{py,in,yml}}
- src/$IMAGE_NAME/*.{{py,in,yml}}
- src/$IMAGE_NAME/Dockerfile
- src/$IMAGE_NAME/Dockerfile
...
@@ -46,8 +50,8 @@ build {microservice}:
...
@@ -46,8 +50,8 @@ build {microservice}:
- manifests/$IMAGE_NAME.yaml
- manifests/$IMAGE_NAME.yaml
- .gitlab-ci.yml
- .gitlab-ci.yml
# test
if
the
Docker image can be pulled from the gitlab registry
#
apply unit
test
to
the
{microservice} component
test {microservice}
pull
:
unit
test {microservice}:
variables:
variables:
IMAGE_NAME:
'
{microservice}
'
# name of the microservice
IMAGE_NAME:
'
{microservice}
'
# name of the microservice
IMAGE_TAG:
'
{tag}
'
# tag of the container image (production, development, etc)
IMAGE_TAG:
'
{tag}
'
# tag of the container image (production, development, etc)
...
@@ -56,55 +60,22 @@ test {microservice} pull:
...
@@ -56,55 +60,22 @@ test {microservice} pull:
- build {microservice}
- build {microservice}
before_script:
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
- if docker network list | grep teraflowbridge; then echo
"
teraflowbridge is already created
"
; else docker network create -d bridge teraflowbridge; fi
- if docker container ls | grep influxdb; then docker rm -f influxdb; else echo
"
influxdb image is not in the system
"
; fi
- if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo
"
$IMAGE_NAME image is not in the system
"
; fi
script:
script:
- docker pull
"
$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
"
- docker pull
"
$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
"
rules:
- docker run --name influxdb -d -p 8086:8086 -e INFLUXDB_DB=$INFLUXDB_DATABASE -e INFLUXDB_ADMIN_USER=$INFLUXDB_USER -e INFLUXDB_ADMIN_PASSWORD=$INFLUXDB_PASSWORD -e INXLUXDB_HTTP_AUTH_ENABLED=True --network=teraflowbridge --rm influxdb:1.8
- changes:
- docker run --name $IMAGE_NAME -d -p 7070:7070 --env INFLUXDB_USER=$INFLUXDB_USER --env INFLUXDB_PASSWORD=$INFLUXDB_PASSWORD --env INFLUXDB_DATABASE=$INFLUXDB_DATABASE --env INFLUXDB_HOSTNAME=influxdb -v
"
$PWD/src/$IMAGE_NAME/tests:/opt/results
"
--network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
- src/$IMAGE_NAME/*.{{py,in,yml}}
- docker ps -a
- src/$IMAGE_NAME/Dockerfile
- docker exec -i $IMAGE_NAME bash -c
"
pytest --junitxml=/opt/results/report.xml
"
- src/$IMAGE_NAME/tests/*.py
- src/$IMAGE_NAME/tests/Dockerfile
- manifests/$IMAGE_NAME.yaml
- .gitlab-ci.yml
# test if the Docker image can be executed
test {microservice} run:
variables:
IMAGE_NAME:
'
{microservice}
'
# name of the microservice
IMAGE_TAG:
'
{tag}
'
# tag of the container image (production, development, etc)
stage: test
needs:
- build {microservice}
before_script:
- if docker network list | grep teraflowbridge; then echo
"
teraflowbridge is already created
"
; else docker network create -d bridge teraflowbridge; fi
script:
- docker run -d -p 7070:7070 --name $IMAGE_NAME --network=teraflowbridge --rm
"
$IMAGE_NAME:$IMAGE_TAG
"
- docker ps
after_script:
after_script:
- docker stop {microservice}
- docker rm -f $IMAGE_NAME
- docker rm -f influxdb
- docker network rm teraflowbridge
rules:
rules:
- changes:
- if:
'
$CI_PIPELINE_SOURCE ==
"
merge_request_event
"
&& ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME ==
"
develop
"
|| $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)
'
- src/$IMAGE_NAME/*.{{py,in,yml}}
- if:
'
$CI_PIPELINE_SOURCE ==
"
push
"
&& $CI_COMMIT_BRANCH ==
"
develop
"'
- src/$IMAGE_NAME/Dockerfile
- src/$IMAGE_NAME/tests/*.py
- src/$IMAGE_NAME/tests/Dockerfile
- manifests/$IMAGE_NAME.yaml
- .gitlab-ci.yml
# apply unit test to the {microservice} component
test {microservice} pytest:
variables:
IMAGE_NAME:
'
{microservice}
'
# name of the microservice
IMAGE_NAME_TEST:
'
{microservice}-test
'
# name of the microservice
IMAGE_TAG:
'
{tag}
'
# tag of the container image (production, development, etc)
stage: test
needs:
- build {microservice}
script:
- docker build -t
"
$IMAGE_NAME_TEST:$IMAGE_TAG
"
-f ./src/$IMAGE_NAME/tests/Dockerfile ./src/
- docker run -v
"
$PWD/src/$IMAGE_NAME/tests:/opt/results
"
$IMAGE_NAME_TEST:$IMAGE_TAG
rules:
- changes:
- src/$IMAGE_NAME/*.{{py,in,yml}}
- src/$IMAGE_NAME/*.{{py,in,yml}}
- src/$IMAGE_NAME/Dockerfile
- src/$IMAGE_NAME/Dockerfile
- src/$IMAGE_NAME/tests/*.py
- src/$IMAGE_NAME/tests/*.py
...
@@ -116,65 +87,32 @@ test {microservice} pytest:
...
@@ -116,65 +87,32 @@ test {microservice} pytest:
reports:
reports:
junit: src/$IMAGE_NAME/tests/report.xml
junit: src/$IMAGE_NAME/tests/report.xml
# Deployment of the {microservice} service in
development
Kubernetes Cluster
# Deployment of the {microservice} service in Kubernetes Cluster
deploy {microservice}
development
:
deploy {microservice}:
variables:
variables:
IMAGE_NAME:
'
{microservice}
'
# name of the microservice
IMAGE_NAME:
'
{microservice}
'
# name of the microservice
IMAGE_TAG:
'
{tag}
'
# tag of the container image (production, development, etc)
IMAGE_TAG:
'
{tag}
'
# tag of the container image (production, development, etc)
stage: deploy
stage: deploy
needs:
needs:
- build {microservice}
- unit test {microservice}
- test {microservice} run
# - dependencies all
# - integ_test execute
script:
script:
-
'
sed -i
"
s/$IMAGE_NAME:.*/$IMAGE_NAME:$IMAGE_TAG/
"
manifests/$IMAGE_NAME.yaml
'
- kubectl version
- kubectl version
- kubectl get all
- kubectl get all
- kubectl apply -f
"
manifests/$IMAGE_NAME.yaml
"
- kubectl apply -f
"
manifests/$IMAGE_NAME.yaml
"
- kubectl get all
- kubectl get all
# environment:
# environment:
# name:
developmen
t
# name:
tes
t
# url: https://example.com
# url: https://example.com
# kubernetes:
# kubernetes:
# namespace:
developmen
t
# namespace:
tes
t
rules:
rules:
- if:
'
$CI_PIPELINE_SOURCE ==
"
merge_request_event
"
&& $CI_MERGE_REQUEST_TARGET_BRANCH_NAME ==
"
develop
"'
- if:
'
$CI_PIPELINE_SOURCE ==
"
merge_request_event
"
&& $CI_MERGE_REQUEST_TARGET_BRANCH_NAME ==
"
develop
"'
when: manual
- if:
'
$CI_PIPELINE_SOURCE ==
"
push
"
&& $CI_COMMIT_BRANCH ==
"
develop
"'
changes:
- src/$IMAGE_NAME/*.{{py,in,yml}}
- src/$IMAGE_NAME/Dockerfile
- src/$IMAGE_NAME/tests/*.py
- src/$IMAGE_NAME/tests/Dockerfile
- manifests/$IMAGE_NAME.yaml
- .gitlab-ci.yml
# Deployment of the {microservice} service in production Kubernetes Cluster
deploy {microservice} development:
variables:
IMAGE_NAME:
'
{microservice}
'
# name of the microservice
IMAGE_TAG:
'
{tag}
'
# tag of the container image (production, development, etc)
stage: deploy
needs:
- build {microservice}
- test {microservice} run
script:
- kubectl version
- kubectl get all
- kubectl apply -f
"
manifests/$IMAGE_NAME.yaml
"
- kubectl get all
# environment:
# name: production
# url: https://example.com
# kubernetes:
# namespace: production
rules:
- if:
'
$CI_PIPELINE_SOURCE ==
"
merge_request_event
"
&& $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
'
- if:
'
$CI_PIPELINE_SOURCE ==
"
merge_request_event
"
&& $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
'
when: manual
when: manual
changes:
- src/$IMAGE_NAME/*.{{py,in,yml}}
- src/$IMAGE_NAME/Dockerfile
- src/$IMAGE_NAME/tests/*.py
- src/$IMAGE_NAME/tests/Dockerfile
- manifests/$IMAGE_NAME.yaml
- .gitlab-ci.yml
"""
"""
f
.
write
(
yml_template
.
format
(
microservice
=
args
.
microservice
,
tag
=
args
.
tag
))
f
.
write
(
yml_template
.
format
(
microservice
=
args
.
microservice
,
tag
=
args
.
tag
))
print
(
"
File created in the following path: {file}
"
.
format
(
file
=
file
))
print
(
"
File created in the following path: {file}
"
.
format
(
file
=
file
))
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment