-
New Feature
-
Resolution: Unresolved
-
Minor
-
EC2-plugin 1.23, Jenkins 1.572
It looks like init-scripts don't get the environment variables defined for a node, or global environment variables defined in the main Configure Jenkins page, injected. At least for EC2 nodes.
The environment variables are present when running jobs, but not when running init scripts. Even when those environment variables are shown in the "Enviroment Variables" list under "System Information" for a node, an init script that has a line like:
env > /tmp/init-environ
will print an environment that doesn't include them, and shell substitutions won't use them.
In case they were set but not exported I tested with:
set > /tmp/set-environ
but the vars weren't present there either.
This makes it harder to parameterize init scripts.
The environment that was set was:
SHELL=/bin/bash
TERM=dumb
USER=root
SUDO_USER=admin
SUDO_UID=1000
USERNAME=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
PWD=/home/admin
SHLVL=1
SUDO_COMMAND=/tmp/init.sh
HOME=/root
LOGNAME=root
SUDO_GID=1000
_=/usr/bin/env
[JENKINS-23864] Environment variables are not set in init script
Description |
Original:
It looks like init-scripts don't get the environment variables defined for a node, or global environment variables defined in the main Configure Jenkins page, injected. The environment variables are present when running jobs, but not when running init scripts. Even when those environment variables are shown in the "Enviroment Variables" list under "System Information" for a node, an init script that has a line like: {code} env > /tmp/init-environ {code} will print an environment that doesn't include them, and shell substitutions won't use them. In case they were set but not exported I tested with: {code} set > /tmp/set-environ {code} but the vars weren't present there either. This makes it harder to parameterize init scripts. |
New:
It looks like init-scripts don't get the environment variables defined for a node, or global environment variables defined in the main Configure Jenkins page, injected. At least for EC2 nodes. The environment variables are present when running jobs, but not when running init scripts. Even when those environment variables are shown in the "Enviroment Variables" list under "System Information" for a node, an init script that has a line like: {code} env > /tmp/init-environ {code} will print an environment that doesn't include them, and shell substitutions won't use them. In case they were set but not exported I tested with: {code} set > /tmp/set-environ {code} but the vars weren't present there either. This makes it harder to parameterize init scripts. |
Description |
Original:
It looks like init-scripts don't get the environment variables defined for a node, or global environment variables defined in the main Configure Jenkins page, injected. At least for EC2 nodes. The environment variables are present when running jobs, but not when running init scripts. Even when those environment variables are shown in the "Enviroment Variables" list under "System Information" for a node, an init script that has a line like: {code} env > /tmp/init-environ {code} will print an environment that doesn't include them, and shell substitutions won't use them. In case they were set but not exported I tested with: {code} set > /tmp/set-environ {code} but the vars weren't present there either. This makes it harder to parameterize init scripts. |
New:
It looks like init-scripts don't get the environment variables defined for a node, or global environment variables defined in the main Configure Jenkins page, injected. At least for EC2 nodes. The environment variables are present when running jobs, but not when running init scripts. Even when those environment variables are shown in the "Enviroment Variables" list under "System Information" for a node, an init script that has a line like: {code} env > /tmp/init-environ {code} will print an environment that doesn't include them, and shell substitutions won't use them. In case they were set but not exported I tested with: {code} set > /tmp/set-environ {code} but the vars weren't present there either. This makes it harder to parameterize init scripts. The environment that was set was: {code} SHELL=/bin/bash TERM=dumb USER=root SUDO_USER=root SUDO_UID=0 USERNAME=root MAIL=/var/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin PWD=/home/admin DEBIAN_PRIORITY=critical SHLVL=1 SUDO_COMMAND=/bin/bash HOME=/root LOGNAME=root DEBIAN_FRONTEND=noninteractive SUDO_GID=0 _=/usr/bin/env {code} |
Description |
Original:
It looks like init-scripts don't get the environment variables defined for a node, or global environment variables defined in the main Configure Jenkins page, injected. At least for EC2 nodes. The environment variables are present when running jobs, but not when running init scripts. Even when those environment variables are shown in the "Enviroment Variables" list under "System Information" for a node, an init script that has a line like: {code} env > /tmp/init-environ {code} will print an environment that doesn't include them, and shell substitutions won't use them. In case they were set but not exported I tested with: {code} set > /tmp/set-environ {code} but the vars weren't present there either. This makes it harder to parameterize init scripts. The environment that was set was: {code} SHELL=/bin/bash TERM=dumb USER=root SUDO_USER=root SUDO_UID=0 USERNAME=root MAIL=/var/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin PWD=/home/admin DEBIAN_PRIORITY=critical SHLVL=1 SUDO_COMMAND=/bin/bash HOME=/root LOGNAME=root DEBIAN_FRONTEND=noninteractive SUDO_GID=0 _=/usr/bin/env {code} |
New:
It looks like init-scripts don't get the environment variables defined for a node, or global environment variables defined in the main Configure Jenkins page, injected. At least for EC2 nodes. The environment variables are present when running jobs, but not when running init scripts. Even when those environment variables are shown in the "Enviroment Variables" list under "System Information" for a node, an init script that has a line like: {code} env > /tmp/init-environ {code} will print an environment that doesn't include them, and shell substitutions won't use them. In case they were set but not exported I tested with: {code} set > /tmp/set-environ {code} but the vars weren't present there either. This makes it harder to parameterize init scripts. The environment that was set was: {code} SHELL=/bin/bash TERM=dumb USER=root SUDO_USER=admin SUDO_UID=1000 USERNAME=root MAIL=/var/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin PWD=/home/admin SHLVL=1 SUDO_COMMAND=/tmp/init.sh HOME=/root LOGNAME=root SUDO_GID=1000 _=/usr/bin/env {code} |
Labels | New: ec2 environment environment-variables init-script |
Workflow | Original: JNJira [ 156728 ] | New: JNJira + In-Review [ 179370 ] |
Issue Type | Original: Bug [ 1 ] | New: New Feature [ 2 ] |
It looks like initScript execution is done by ssh/EC2UnixLauncher.java in launch(...).
So we'd need to inject slave and global environment variables on the remote end of the SSH call there.
The Trilead ssh wrapper doesn't seem to support setting env vars, so the simplest option would be to prepend them to the init script.
I could add that part fairly trivially. My problem is that I have no idea how to get the environment variables configured on a node, or get the global environment vars from the Jenkins configuration.