Сценарий Python не может получить доступ к некоторым переменным среды - PullRequest
0 голосов
/ 13 ноября 2018

Я создаю Docker Image FROM node:8.9.3-alpine (который является Debian), а затем запускаю его как обычно и передаю параметры, подобные этому:

docker run -dt \
-e lsRegion=${bamboo_lsRegion} \
-e lsCluster=${bamboo_lsCluster} \

Затем внутри этого контейнера я экспортирую некоторые переменные, и когда я их выводю, я вижу правильное значение

export lsEnv=${lsEnv:-'dev'}

Позже в скриптах я запускаю скрипт на python, и когда я запускаю print(os.environ), я вижу все переменные из docker run, такие как lsRegion, но я не вижу недавно экспортированную, такую ​​как lsEnv.

Я уже нашел и попытался решить с помощью этого: Python: не могу получить доступ к вновь определенным переменным среды , вызвав source ~/.bashrc, но я не могу найти этот файл.

Я пытался

~/.bashrc
/etc/bash.bashrc
/root/.bashrc

Но ни один из них не существует (также не знает, решит ли это мою проблему) и заканчивается этим сообщением об ошибке /app/deploy.sh: source: line 16: can't open '/root/.bashrc'


Более воспроизводимый пример:

Dockerfile

FROM node:8.9.3-alpine

RUN apk add --no-cache \
    python \
    py-pip \
    ca-certificates \
    openssl \
    groff \
    less \
    bash \
    curl \
    jq \
    git \
    zip \
    build-base \
  && pip install --no-cache-dir --upgrade pip awscli \
  && aws configure set preview.cloudfront true

ENV TERRAFORM_VERSION 0.11.10

RUN wget -O terraform.zip https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip && \
    unzip terraform.zip -d /usr/local/bin && \
    rm -f terraform.zip

RUN apk -v --update add python py-pip
RUN pip install --upgrade awscli
RUN pip install --upgrade boto3

COPY ./build.variables /app/build.variables
COPY ./aws/taskdef/template.json /app/template.json
COPY ./deploy.sh /app/deploy.sh
COPY ./deploy.py /app/deploy.py
COPY ./terraform /app/terraform

CMD ["sh", "/app/deploy.sh"] 

deploy.sh

#!/bin/bash -x

cd /app/terraform
./run-terraform.sh
cd ..
python /app/deploy.py

Terraform / run-terraform.sh

   ...
   export lsEnv="NotThere"
   ...

скрипт Python

#!/usr/bin/env python
import os
print(os.environ)

На печати будет отображаться lsRegion или lsCluster, но не будет отображаться lsEnv

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Внутри deploy.sh, вам нужно набрать run-terraform.sh, если вы хотите повлиять на среду процесса, который запускает deploy.py, а не на среду, созданную для процесса, который запускает run-terraform.sh.

#!/bin/bash -x

cd /app/terraform
source ./run-terraform.sh
cd ..
python /app/deploy.py

(Вы также можете использовать . ./run-terraform.sh; source - более читаемый синоним bash для команды POSIX ., но . необходим, если вы используете какую-либо другую POSIX-совместимую оболочку, которая не ' t support source.)

0 голосов
/ 14 ноября 2018

Я решаю это, вызывая эту команду в terraform/run-terraform.sh для каждой переменной среды, которая мне понадобится в скрипте Python:

echo "export lsTargetGroup=$lsTargetGroup" >> ~/.bashrc 

А затем в deploy.sh я просто добавляю source ~/.bashrc перед вызовом скрипта Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...