Some deploy updates
parent
af00f3729d
commit
a54002252c
|
@ -0,0 +1 @@
|
|||
HOST=dvdemo.privatedns.org
|
|
@ -3,5 +3,4 @@ PORTAINER_API_KEY=ptr_RwxH2Cd+htdD2FoFiG46erT9beyvj9VoF3BrQPtDH3Q=
|
|||
PORTAINER_EP=CICD-runner
|
||||
GITEA_API_KEY=f449c74ec7f04e54fe1e481eae43492b34cea406
|
||||
DEPLOY_REPO_URL=https://dvgit.privatedns.org/lars/DeployTests
|
||||
DEPLOY_BRANCH=main
|
||||
DEPLOY_HOST=dvdemo.privatedns.org
|
||||
DEPLOY_BRANCH=develop
|
|
@ -6,12 +6,12 @@ import argparse
|
|||
import requests
|
||||
import json
|
||||
import uuid
|
||||
from dotenv import load_dotenv
|
||||
from dotenv import load_dotenv, dotenv_values
|
||||
from string import Template
|
||||
from pathlib import Path
|
||||
from urllib.parse import urlparse
|
||||
|
||||
load_dotenv()
|
||||
load_dotenv('.env.deploy')
|
||||
|
||||
required_env_vars = {
|
||||
'PORTAINER': 'The portainer instance to deploy to',
|
||||
|
@ -20,7 +20,6 @@ required_env_vars = {
|
|||
'GITEA_API_KEY': 'API-Key to access Gitea instance',
|
||||
'DEPLOY_REPO_URL': 'The repository URL to deploy',
|
||||
'DEPLOY_BRANCH': 'The branch to deploy',
|
||||
'DEPLOY_HOST': 'The host name under which the deployment will be reachable',
|
||||
}
|
||||
|
||||
# Try getting all arguments from (in order): 1 command line, 2 .env file, 3 Environment
|
||||
|
@ -58,7 +57,7 @@ try:
|
|||
json_endpoints = response.json()
|
||||
|
||||
except requests.exceptions.RequestException as err:
|
||||
raise Exception(f'Could not retrieve portainer endpoints: {err}')
|
||||
raise Exception(f'Could not retrieve portainer endpoints: {err}. \n\n Response: {response.content}')
|
||||
|
||||
endpoint_id = None
|
||||
for endpoint in json_endpoints:
|
||||
|
@ -78,6 +77,17 @@ owner = repo_parts[0]
|
|||
repo = repo_parts[1]
|
||||
|
||||
### Template substitution for the portainer stack deployment ###
|
||||
|
||||
app_env = dotenv_values('.env.app')
|
||||
portainer_deploy_env = [{
|
||||
"name": "COMPOSE_PROJECT_NAME",
|
||||
"value": args.DEPLOY_BRANCH
|
||||
}]
|
||||
for key, value in app_env.items():
|
||||
portainer_deploy_env.append({
|
||||
"name": key,
|
||||
"value": os.getenv(value) if value.startswith("$") else value
|
||||
})
|
||||
portainer_deploy_payload = {
|
||||
"additionalFiles": [
|
||||
"deploy/portainer/portainer_deploy.docker-compose.yml"
|
||||
|
@ -86,16 +96,7 @@ portainer_deploy_payload = {
|
|||
"webhook": deploy_webhook
|
||||
},
|
||||
"composeFile": "docker-compose.yml",
|
||||
"env": [
|
||||
{
|
||||
"name": "HOST",
|
||||
"value": args.DEPLOY_HOST
|
||||
},
|
||||
{
|
||||
"name": "COMPOSE_PROJECT_NAME",
|
||||
"value": args.DEPLOY_BRANCH
|
||||
}
|
||||
],
|
||||
"env": portainer_deploy_env,
|
||||
"fromAppTemplate": False,
|
||||
"name": f"{owner}_{repo}_{args.DEPLOY_BRANCH.replace('/', '_')}".lower(),
|
||||
"repositoryAuthentication": True,
|
||||
|
@ -114,7 +115,7 @@ try:
|
|||
deploy_response = response.json()
|
||||
|
||||
except requests.exceptions.RequestException as err:
|
||||
raise Exception(f'Could not deploy portainer stack: {err}')
|
||||
raise Exception(f'Could not deploy portainer stack: {err}.\n\n Response: {response.content}')
|
||||
|
||||
### Add Webhook to Gitea ###
|
||||
webhook_payload = {
|
||||
|
@ -138,5 +139,5 @@ try:
|
|||
webhook_response = response.json()
|
||||
|
||||
except requests.exceptions.RequestException as err:
|
||||
raise Exception(f'Could not add webhook to Gitea: {err}')
|
||||
raise Exception(f'Could not add webhook to Gitea: {err}.\n\n Response: {response.content}')
|
||||
print(f'Successfully deployed project')
|
|
@ -1,10 +1,10 @@
|
|||
version: '3.4'
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
http-echo:
|
||||
networks:
|
||||
- cicd
|
||||
|
||||
|
||||
networks:
|
||||
cicd:
|
||||
driver: bridge
|
||||
|
|
|
@ -11,7 +11,7 @@ from string import Template
|
|||
from pathlib import Path
|
||||
from urllib.parse import urlparse
|
||||
|
||||
load_dotenv()
|
||||
load_dotenv('.env.deploy')
|
||||
|
||||
required_env_vars = {
|
||||
'PORTAINER': 'The portainer instance to deploy to',
|
||||
|
@ -53,7 +53,7 @@ try:
|
|||
json_endpoints = endpoint_response.json()
|
||||
|
||||
except requests.exceptions.RequestException as err:
|
||||
raise Exception(f'Could not retrieve portainer endpoints: {err}')
|
||||
raise Exception(f'Could not retrieve portainer endpoints: {err}.\n\n Response: {endpoint_response.content}')
|
||||
|
||||
endpoint_id = None
|
||||
for endpoint in json_endpoints:
|
||||
|
@ -73,7 +73,7 @@ try:
|
|||
json_stacks = stacks_response.json()
|
||||
|
||||
except requests.exceptions.RequestException as err:
|
||||
raise Exception(f'Could not retrieve portainer stacks: {err}')
|
||||
raise Exception(f'Could not retrieve portainer stacks: {err}.\n\n Response: {stacks_response.content}')
|
||||
|
||||
stack_id = None
|
||||
stack_webhook = None
|
||||
|
@ -112,7 +112,7 @@ try:
|
|||
json_webhooks = get_webhooks_response.json()
|
||||
|
||||
except requests.exceptions.RequestException as err:
|
||||
raise Exception(f'Could not get webhooks from Gitea: {err}')
|
||||
raise Exception(f'Could not get webhooks from Gitea: {err}.\n\n Response:{get_webhooks_response.content}')
|
||||
|
||||
webhook_id = None
|
||||
for webhook in json_webhooks:
|
||||
|
@ -128,21 +128,19 @@ else:
|
|||
### Remove Webhook from Gitea ###
|
||||
remove_webhook_url = f"{gitea}/api/v1/repos/{repo_path}/hooks/{webhook_id}"
|
||||
try:
|
||||
#TODO: Webhooks are returned paginated, this only checks first page
|
||||
del_webhooks_response = requests.delete(remove_webhook_url, headers=gitea_headers)
|
||||
del_webhooks_response.raise_for_status() # Raise HTTPError for bad requests
|
||||
|
||||
except requests.exceptions.RequestException as err:
|
||||
raise Exception(f"Could not delete webhook '{webhook_id}' from Gitea: {err}")
|
||||
raise Exception(f"Could not delete webhook '{webhook_id}' from Gitea: {err}.\n\n Response: {del_webhooks_response.content}")
|
||||
|
||||
## Remove Stack from Portainer ###
|
||||
remove_stack_url = f"{args.PORTAINER}/api/stacks/{stack_id}?endpointId={endpoint_id}"
|
||||
try:
|
||||
#TODO: Webhooks are returned paginated, this only checks first page
|
||||
del_stack_response = requests.delete(remove_stack_url, headers=portainer_headers)
|
||||
del_stack_response.raise_for_status() # Raise HTTPError for bad requests
|
||||
|
||||
except requests.exceptions.RequestException as err:
|
||||
raise Exception(f"Could not delete stack '{stack_id}' from Portainer: {err}")
|
||||
raise Exception(f"Could not delete stack '{stack_id}' from Portainer: {err}.\n\n Response: {del_stack_response.content}")
|
||||
|
||||
print(f'Successfully undeployed project')
|
Loading…
Reference in New Issue