Commit 44d5b176 authored by Asad Ullah Khan's avatar Asad Ullah Khan

add jenkins middleware and post deployment cloud functions

parent 0b960b80
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
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"])
requests
cryptography
google-cloud-datastore==2.7.1
firebase-admin
\ No newline at end of file
requests
cryptography
google-cloud-datastore==2.7.1
firebase-admin
\ No newline at end of file
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment