我有以下命令。
oc new-build gen-dev/genbuilder:latest~ssh://git@mycompany.net:7999/gen/pfs-converter.git#DEV1 \
--source-secret='privatekey' \
--name='testbuild' \
--env=KEY=VALUE
我想将环境变量设置为具有一些秘密值,因为如果没有这些值,构建将失败,并且由于新的构建会立即构建新的容器,因此我需要在执行此命令之前执行此操作。
答案 0 :(得分:1)
您可以这样引用环境定义中的秘密来创建环境变量:
apiVersion: v1
kind: Pod
metadata:
name: secret-example-pod
spec:
containers:
- name: secret-test-container
image: busybox
command: [ "/bin/sh", "-c", "export" ]
env:
- name: TEST_SECRET_USERNAME_ENV_VAR
valueFrom:
secretKeyRef:
name: test-secret
key: username
restartPolicy: Never
这里是documentation。
如果您需要从命令行执行所有操作,则可以使用JSONPath这样从所需的机密获取值:
oc new-build gen-dev/genbuilder:latest~ssh://git@mycompany.net:7999/gen/pfs-converter.git#DEV1 \
--source-secret='privatekey' \
--name='testbuild' \
-e PRIVATE_KEY=$(oc get secret <your secret> -o jsonpath='{<path to field>}')
这将在构建容器时将PRIVATE_KEY添加到容器的环境中,并在启动时可供应用程序使用。
OC命令周围的$()获取密码将在内部评估该命令,然后将其输出放在此处。
-o
标志告诉OC CLI如何提供输出,因此,例如,如果您仅想要构建的名称,则可以运行:
oc get builds -o name
Here是受支持的输出选项。
您需要将JSONPath提供给您要从秘密中提取的字段。例如,要从此机密获取密码字段:
apiVersion: v1
kind: Secret
metadata:
name: test-secret
namespace: my-namespace
type: Opaque
data:
username: dmFsdWUtMQ0K
password: dmFsdWUtMg0KDQo=
stringData:
hostname: myapp.mydomain.com
您将运行:
oc new-build gen-dev/genbuilder:latest~ssh://git@mycompany.net:7999/gen/pfs-converter.git#DEV1 \
--source-secret='privatekey' \
--name='testbuild' \
-e PASSWORD=$(oc get secret test-secret -o jsonpath='{.data.password}')
这与在命令中添加-e PASSWORD='dmFsdWUtMg0KDQo='
相同,容器中的应用程序将能够从容器的环境访问该变量。
这是使用JSONPath的documentation,如果无法正确找到路径,则使用evaluator。
您还可以使用--build-secret
标志向构建环境添加机密,而无需将其暴露于环境中。
命令:
oc new-build \
openshift/nodejs-010-centos7~https://github.com/sclorg/nodejs-ex.git \
--build-secret “secret-npmrc:/etc”
这会将密钥添加到构建环境中的目录中,在这种情况下,.npmrc文件已添加到/ etc。
我认为向环境添加秘密通常不是一个好习惯,并且您可能希望研究更改设置以避免这种情况。过去,我总是在模板定义中添加机密信息,但是看起来您是在让Openshift为您创建模板。