#!/usr/bin/env python3
from datetime import datetime
import json
import logging
import os
import sys
from google.cloud import secretmanager
import requests
GIT_HUB_REPO_OWNER = “${オーナー名}”
LOG_LEVEL = os.environ.get(“LOG_LEVEL”, “INFO”)
class TimeFormatter(logging.Formatter):
converter = datetime.fromtimestamp
def formatTime(self, record, datefmt=None):
created_time = self.converter(record.created).astimezone()
timezone = created_time.strftime('%z')
return created_time.strftime('%Y/%m/%d %H:%M:%S.%f') + timezone[:3] + ':' + timezone[3:]
def init_logger():
logger = logging.getLogger(name)
log_format_string = json.dumps({
'logLevel': '%(levelname)s',
'time': '%(asctime)s',
'line': "%(filename)s: %(lineno)d",
'message': '%(message)s',
}, indent=None)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter((TimeFormatter(log_format_string)))
logger.addHandler(handler)
logger.setLevel(LOG_LEVEL)
return logger
def get_git_hub_token(project_id):
client = secretmanager.SecretManagerServiceClient()
name = client.secret_version_path(project_id, ‘GIT_HUB_PERSONAL_ACCESS_TOKEN’, 1)
response = client.access_secret_version(name=name)
return response.payload.data.decode('UTF-8')
def create_comment_on_commit(token, repo_name, commit_sha, comment, logger):
url = f”https://api.github.com/repos/{repo_name}/commits/{commit_sha}/comments”
headers = {‘Authorization’: f’token {token}‘}
data = {’body’: comment}
response = requests.post(url, headers=headers, json=data)
if response.status_code != 201:
raise Exception(f'Failed to create comment on commit: {response.content}')
logger.info("Create comment on commit")
return response.json()
def main():
logger = init_logger()
project_id = os.environ[“PROJECT_ID”]
repo_name = os.environ[“REPO_NAME”]
commit_sha = os.environ[“COMMIT_SHA”]
build_id = os.environ[“BUILD_ID”]
create_comment_on_commit(
repo_name=f"{GIT_HUB_REPO_OWNER}/{repo_name}",
commit_sha=commit_sha,
comment='\n'.join([
"## Deployed",
f"Commit ID: {commit_sha}",
f"Cloud Build URL: https://console.cloud.google.com/cloud-build/builds;region=global/{build_id};step=0?hl=ja&project={project_id}",
]),
token=get_git_hub_token(project_id=project_id),
logger=logger
)
if name == “main”:
main()
#### 追加ファイル② `python/requirements.post_deploy.txt`
- `python/post_deploy/__main__.py` で利用するライブラリを記載します。
```python
requests==2.28.2
google-cloud-secret-manager==2.16.4
追加ファイル③ cloudbuild.yaml