![](/img/trans.png)
[英]Can't access Jenkins environment variables in Python script with os.environ
[英]Python script can't access some environment variables
我正在FROM node:8.9.3-alpine
(這是Debian)構建Docker Image,然后像往常一樣運行它並傳遞如下參數:
docker run -dt \
-e lsRegion=${bamboo_lsRegion} \
-e lsCluster=${bamboo_lsCluster} \
然后在那個容器中,我導出了一些變量,當我回顯它們時,我可以看到正確的值
export lsEnv=${lsEnv:-'dev'}
稍后在腳本中運行python腳本,當運行print(os.environ)
我可以看到lsRegion
docker run
所有變量docker run
像lsRegion
一樣lsRegion
但看不到新導出的像lsEnv
這樣的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
如果要影響運行deploy.py
的進程的環境,而不是為運行run-terraform.sh
的進程創建的環境,則需要在deploy.sh
內run-terraform.sh
源代碼。
#!/bin/bash -x
cd /app/terraform
source ./run-terraform.sh
cd ..
python /app/deploy.py
(您也可以使用. ./run-terraform.sh
; source
是POSIX .
命令的可讀性更高的bash
同義詞,但是.
如果使用不支持source
其他兼容POSIX的外殼,則.
是必需的。)
我通過在terraform/run-terraform.sh
為我在python腳本中需要的每個環境變量調用此命令來解決此問題:
echo "export lsTargetGroup=$lsTargetGroup" >> ~/.bashrc
然后在deploy.sh
我只是在調用python腳本之前添加source ~/.bashrc
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.