Release worker: provide full env + remove worker. (#39)

* Release worker: provide full env + remove worker.

This change improves the release task pseudo-worker.

 * Provides the full environment (both app env and config env) to the
   release task.

 * Uses a non-zero return value to bail early if release
   phase fails.

* Make ENV_ROOT (venv) accessible to release scripts.
pull/45/head
Chris McCormick 2019-06-23 22:48:47 +08:00 zatwierdzone przez Rui Carmo
rodzic a9b58917b4
commit 8ca63c60de
1 zmienionych plików z 10 dodań i 3 usunięć

13
piku.py
Wyświetl plik

@ -21,7 +21,7 @@ from os.path import abspath, basename, dirname, exists, getmtime, join, realpath
from re import sub
from shutil import copyfile, rmtree, which
from socket import socket, AF_INET, SOCK_STREAM
from sys import argv, stdin, stdout, stderr, version_info
from sys import argv, stdin, stdout, stderr, version_info, exit
from stat import S_IRUSR, S_IWUSR, S_IXUSR
from subprocess import call, check_output, Popen, STDOUT, PIPE
from tempfile import NamedTemporaryFile
@ -337,6 +337,7 @@ def do_deploy(app, deltas={}):
procfile = join(app_path, 'Procfile')
log_path = join(LOG_ROOT, app)
env_file = join(APP_ROOT, app, 'ENV')
config_file = join(ENV_ROOT, app, 'ENV')
env = {'GIT_WORK_DIR': app_path}
if exists(app_path):
@ -349,9 +350,15 @@ def do_deploy(app, deltas={}):
makedirs(log_path)
workers = parse_procfile(procfile)
if workers and len(workers):
settings = parse_settings(env_file, env)
settings = parse_settings(config_file, settings)
if "release" in workers:
echo("-----> Releasing", fg='green')
call(workers["release"], cwd=app_path, env=env, shell=True)
settings["ENV_ROOT"] = join(ENV_ROOT, app)
retval = call(workers["release"], cwd=app_path, env=settings, shell=True)
if retval:
exit(retval)
workers.pop("release", None)
if exists(join(app_path, 'requirements.txt')):
echo("-----> Python app detected.", fg='green')
deploy_python(app, deltas)
@ -367,7 +374,6 @@ def do_deploy(app, deltas={}):
else:
echo("-----> Could not detect runtime!", fg='red')
# TODO: detect other runtimes
settings = parse_settings(env_file, {})
if settings.get("AUTO_RESTART", False):
echo("-----> Auto-restarting.", fg='green')
do_restart(app)
@ -473,6 +479,7 @@ def spawn_app(app, deltas={}):
app_path = join(APP_ROOT, app)
procfile = join(app_path, 'Procfile')
workers = parse_procfile(procfile)
workers.pop("release", None)
ordinals = defaultdict(lambda:1)
worker_count = {k:1 for k in workers.keys()}