From 685cc282ba54157e9a0fef84fcdc334752fd5c50 Mon Sep 17 00:00:00 2001 From: Xavier-Do Date: Thu, 7 Nov 2019 13:51:44 +0100 Subject: [PATCH] [IMP] runbot: add env parameter support for docker in config steps --- runbot/container.py | 6 +++++- runbot/models/build_config.py | 8 +++++--- runbot/views/config_views.xml | 2 ++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/runbot/container.py b/runbot/container.py index fdb06b0b..22ea097a 100644 --- a/runbot/container.py +++ b/runbot/container.py @@ -74,7 +74,7 @@ def docker_build(log_path, build_dir): dbuild.wait() -def docker_run(run_cmd, log_path, build_dir, container_name, exposed_ports=None, cpu_limit=None, preexec_fn=None, ro_volumes=None): +def docker_run(run_cmd, log_path, build_dir, container_name, exposed_ports=None, cpu_limit=None, preexec_fn=None, ro_volumes=None, env_variables=None): """Run tests in a docker container :param run_cmd: command string to run in container :param log_path: path to the logfile that will contain odoo stdout and stderr @@ -102,6 +102,10 @@ def docker_run(run_cmd, log_path, build_dir, container_name, exposed_ports=None, logs.write("Adding readonly volume '%s' pointing to %s \n" % (dest, source)) docker_command.append('--volume=%s:/data/build/%s:ro' % (source, dest)) + if env_variables: + for var in env_variables: + docker_command.append('-e=%s' % var) + serverrc_path = os.path.expanduser('~/.openerp_serverrc') odoorc_path = os.path.expanduser('~/.odoorc') final_rc = odoorc_path if os.path.exists(odoorc_path) else serverrc_path if os.path.exists(serverrc_path) else None diff --git a/runbot/models/build_config.py b/runbot/models/build_config.py index 25ac207d..49de202d 100644 --- a/runbot/models/build_config.py +++ b/runbot/models/build_config.py @@ -108,9 +108,10 @@ class ConfigStep(models.Model): coverage = fields.Boolean('Coverage', default=False, track_visibility='onchange') flamegraph = fields.Boolean('Allow Flamegraph', default=False, track_visibility='onchange') test_enable = fields.Boolean('Test enable', default=True, track_visibility='onchange') - test_tags = fields.Char('Test tags', help="comma separated list of test tags") - enable_auto_tags = fields.Boolean('Allow auto tag', default=True) + test_tags = fields.Char('Test tags', help="comma separated list of test tags", track_visibility='onchange') + enable_auto_tags = fields.Boolean('Allow auto tag', default=True, track_visibility='onchange') extra_params = fields.Char('Extra cmd args', track_visibility='onchange') + additionnal_env = fields.Char('Extra env', help='Example: foo="bar",bar="foo". Cannot contains \' ', track_visibility='onchange') # python python_code = fields.Text('Python code', track_visibility='onchange', default=PYTHON_DEFAULT) running_job = fields.Boolean('Job final state is running', default=False, help="Docker won't be killed if checked") @@ -362,7 +363,8 @@ class ConfigStep(models.Model): cmd.finals.append(['gzip', '-f', self._perfs_data_path()]) # keep data but gz them to save disc space max_timeout = int(self.env['ir.config_parameter'].get_param('runbot.runbot_timeout', default=10000)) timeout = min(self.cpu_limit, max_timeout) - return docker_run(cmd.build(), log_path, build._path(), build._get_docker_name(), cpu_limit=timeout, ro_volumes=exports) + env_variables = self.additionnal_env.replace("'", '"').split(',') # remove ' + return docker_run(cmd.build(), log_path, build._path(), build._get_docker_name(), cpu_limit=timeout, ro_volumes=exports, env_variables=env_variables) def log_end(self, build): if self.job_type == 'create_build': diff --git a/runbot/views/config_views.xml b/runbot/views/config_views.xml index 2a8adc17..212a2958 100644 --- a/runbot/views/config_views.xml +++ b/runbot/views/config_views.xml @@ -60,7 +60,9 @@ + +