Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
gcp-hackathon-2022
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Muhammad Tehami
gcp-hackathon-2022
Commits
44d5b176
Commit
44d5b176
authored
Oct 18, 2022
by
Asad Ullah Khan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add jenkins middleware and post deployment cloud functions
parent
0b960b80
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
174 additions
and
0 deletions
+174
-0
confluence.py
cloud-functions/post-deployment/confluence.py
+66
-0
main.py
cloud-functions/post-deployment/main.py
+49
-0
requirements.txt
cloud-functions/post-deployment/requirements.txt
+4
-0
requirements.txt
cloud-functions/trigger-jenkins-middleware/requirements.txt
+4
-0
trigger-jenkins-cloud-func.py
.../trigger-jenkins-middleware/trigger-jenkins-cloud-func.py
+51
-0
No files found.
cloud-functions/post-deployment/confluence.py
0 → 100644
View file @
44d5b176
import
requests
,
json
def
updateConfluence
(
project_name
,
app_name
,
version
,
env
):
try
:
CONFLUENCE_HOST
=
"tehami.atlassian.net"
ENV_PAGE_DICT
=
{
"DEV"
:
131211
,
"QA"
:
196627
,
"PERF"
:
524289
,
"PROD"
:
393237
}
# Receive from Pub/Sub
session
=
requests
.
Session
()
session
.
auth
=
(
"mohammadtehami@yahoo.com"
,
"XXXXXXXXXXXXXXXXXXXXX"
)
# Get current content
x
=
session
.
get
(
"https://{}/wiki/rest/api/content/{}?expand=body.storage"
.
format
(
CONFLUENCE_HOST
,
ENV_PAGE_DICT
[
env
]))
page
=
x
.
json
()
old_content
=
x
.
json
()[
"body"
][
"storage"
][
"value"
]
# Get current page version
x
=
session
.
get
(
"https://{}/wiki/rest/api/content/{}?expand=version"
.
format
(
CONFLUENCE_HOST
,
ENV_PAGE_DICT
[
env
]))
page_version
=
x
.
json
()[
"version"
][
"number"
]
# Update content
old_row_without_artifact_version
=
"<tr><td><p>{}</p></td><td><p>{}</p></td><td><p>"
.
format
(
project_name
,
app_name
)
version_index
=
old_content
.
index
(
"<tr><td><p>{}</p></td><td><p>{}</p></td><td><p>"
.
format
(
project_name
,
app_name
))
+
len
(
old_row_without_artifact_version
)
old_artifact_version
=
""
for
i
in
range
(
1
,
20
):
if
old_content
[
version_index
+
i
:
version_index
+
i
+
4
]
==
"</p>"
:
old_artifact_version
=
old_content
[
version_index
:
version_index
+
i
]
break
old_row
=
"<tr><td><p>{}</p></td><td><p>{}</p></td><td><p>{}</p></td></tr>"
.
format
(
project_name
,
app_name
,
old_artifact_version
)
new_content
=
old_content
.
replace
(
old_row
,
"<tr><td><p>{}</p></td><td><p>{}</p></td><td><p>{}</p></td></tr>"
.
format
(
project_name
,
app_name
,
version
))
obj
=
{
"id"
:
page
[
"id"
],
"type"
:
"page"
,
"title"
:
page
[
"title"
],
"body"
:
{
"storage"
:
{
"value"
:
new_content
,
"representation"
:
"storage"
}
},
"version"
:
{
"number"
:
page_version
+
1
}
}
headers
=
{
"Content-Type"
:
"application/json"
}
x
=
session
.
put
(
"https://{}/wiki/rest/api/content/{}?expand=body.storage"
.
format
(
CONFLUENCE_HOST
,
ENV_PAGE_DICT
[
env
]),
data
=
json
.
dumps
(
obj
),
headers
=
headers
)
print
(
"Successfully updating the confluence"
)
except
Exception
as
e
:
print
(
"Failed updating the confluence"
)
print
(
"Error: "
+
str
(
e
))
\ No newline at end of file
cloud-functions/post-deployment/main.py
0 → 100644
View file @
44d5b176
import
json
import
requests
import
base64
from
google.cloud
import
firestore
import
datetime
;
import
time
from
confluence
import
*
auth
=
(
"asad"
,
"XXXXXXXXXXXXXXXXXXXXXXXX"
)
jenkins_uri
=
'34.81.121.147:8080'
def
updateStatus
(
event
,
context
):
try
:
pubsub_message
=
base64
.
b64decode
(
event
[
'data'
])
.
decode
(
'utf-8'
)
print
(
pubsub_message
)
print
(
type
(
pubsub_message
))
execution_details
=
json
.
loads
(
pubsub_message
)
job_url
=
'http://{}/job/{}/job/{}/{}/api/json'
.
format
(
jenkins_uri
,
execution_details
[
"projectName"
],
execution_details
[
"artifactName"
],
execution_details
[
"jobId"
])
print
(
job_url
)
j
=
requests
.
get
(
job_url
,
auth
=
auth
)
print
((
j
.
status_code
))
jje
=
j
.
json
()
result
=
jje
[
'result'
]
print
(
result
)
if
result
==
'SUCCESS'
:
print
(
"{}: Job: {} Status: {}"
.
format
(
time
.
ctime
(),
execution_details
[
"artifactName"
],
result
))
print
(
"Result: "
,
result
)
execution_details
[
"status"
]
=
result
elif
result
==
'FAILURE'
:
print
(
"{}: Job: {} Status: {}"
.
format
(
time
.
ctime
(),
execution_details
[
"artifactName"
],
result
))
execution_details
[
"status"
]
=
result
elif
result
==
'ABORTED'
:
print
(
"{}: Job: {} Status: {}"
.
format
(
time
.
ctime
(),
execution_details
[
"artifactName"
],
result
))
execution_details
[
"status"
]
=
result
else
:
print
(
"no status found"
)
except
Exception
as
e
:
print
(
"Error: "
+
str
(
e
))
try
:
db
=
firestore
.
Client
()
ts
=
datetime
.
datetime
.
now
()
execution_details
[
"timestamp"
]
=
ts
print
(
execution_details
)
db
.
collection
(
u'deploymentsStatus'
)
.
add
(
execution_details
)
print
(
"Deployment Status written to firestore collection"
)
except
Exception
as
e
:
print
(
"Failed writing data to firestore"
)
print
(
"Error: "
+
str
(
e
))
updateConfluence
(
execution_details
[
"projectName"
],
execution_details
[
"artifactName"
],
execution_details
[
"artifactVersion"
],
execution_details
[
"environment"
])
cloud-functions/post-deployment/requirements.txt
0 → 100644
View file @
44d5b176
requests
cryptography
google-cloud-datastore==2.7.1
firebase-admin
\ No newline at end of file
cloud-functions/trigger-jenkins-middleware/requirements.txt
0 → 100644
View file @
44d5b176
requests
cryptography
google-cloud-datastore==2.7.1
firebase-admin
\ No newline at end of file
cloud-functions/trigger-jenkins-middleware/trigger-jenkins-cloud-func.py
0 → 100644
View file @
44d5b176
import
requests
import
base64
import
json
# from google.cloud import datastore
from
google.cloud
import
firestore
import
datetime
;
jenkins_uri
=
'34.81.121.147:8080'
auth
=
(
"asad"
,
"XXXXXXXXXXXXXXXXXXXXXX"
)
build_token
=
"token"
def
hello_pubsub
(
event
,
context
):
pubsub_message
=
base64
.
b64decode
(
event
[
'data'
])
.
decode
(
'utf-8'
)
print
(
pubsub_message
)
print
(
type
(
pubsub_message
))
execution_details
=
json
.
loads
(
pubsub_message
)
try
:
db
=
firestore
.
Client
()
docs
=
db
.
collection
(
u'requestArtifactDeployment'
)
.
where
(
u'intendID'
,
u'=='
,
execution_details
[
"intendID"
])
.
stream
()
for
doc
in
docs
:
requestedArtifact
=
doc
.
to_dict
()
print
(
f
'{doc.id} => {doc.to_dict()}'
)
requestedArtifact
[
"approverEmail"
]
=
execution_details
[
"approverEmail"
]
requestedArtifact
[
"approve"
]
=
execution_details
[
"approve"
]
requestedArtifact
[
"timestamp"
]
=
datetime
.
datetime
.
now
()
requestedArtifact
[
"intendID"
]
=
execution_details
[
"intendID"
]
print
(
requestedArtifact
)
except
Exception
as
e
:
print
(
"Failed reading data from firestore or no recrod found against intentId found"
)
print
(
"Error: "
+
str
(
e
))
start_build_url
=
'http://{}/job/{}/job/{}/buildWithParameters?token={}'
.
format
(
jenkins_uri
,
requestedArtifact
[
"projectName"
],
requestedArtifact
[
"artifactName"
],
build_token
)
print
(
requestedArtifact
[
"artifactVersion"
])
print
(
start_build_url
)
try
:
if
requestedArtifact
[
"approve"
]
==
"Yes"
:
response
=
requests
.
post
(
start_build_url
,
auth
=
auth
,
params
=
requestedArtifact
)
print
(
response
.
status_code
)
if
(
str
(
response
.
status_code
)
==
"201"
):
print
(
"Jenkins job is triggered"
)
db
.
collection
(
u'approveArtifactDeployment'
)
.
add
(
requestedArtifact
)
else
:
db
.
collection
(
u'approveArtifactDeployment'
)
.
add
(
requestedArtifact
)
print
(
"Approver Decline the request , pipeline is not triggered"
)
except
Exception
as
e
:
print
(
"Failed triggering the Jenkins job"
)
print
(
"Error: "
+
str
(
e
))
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment