jenkins - 在 k8s 容器中访问 jenkins shell 变量
问题描述
stages
{
stage('test')
{
steps
{
withCredentials([string(credentialsId: 'kubeconfigfile', variable: 'KUBECONFIG' )])
{
container('deploycontainer')
{
sh 'TEMPFILE=$(mktemp -p "${PWD}" kubeconfig.XXXXX)'
sh 'echo "${TEMPFILE}"'
}
}
}
}
}
我是创建管道的新手,正在尝试将自由式工作转换为管道。我正在尝试为容器中的 kubeconfig 文件创建一个临时文件。我已经尝试了所有我能想到的访问 shell 的 var 而不是 groovy var 的方法。
即使尝试以下内容也不会在 echo 上打印任何内容:
sh 'TEMPFILE="foo"'
sh 'echo ${TEMPFILE}'
我尝试转义并使用双引号以及单引号和三引号块。
如何从容器块中访问 shell 变量/如何制作临时文件并将其回显到该容器块中?
解决方案
使用 Jenkinsfiles,每个sh
步骤都运行自己的 shell。当每个 shell 终止时,它的所有状态都会丢失。
如果你想按顺序运行多个 shell 命令,你可以做两件事之一。
您可以使用分号分隔一长串命令:
sh 'cmd1; cmd2; cmd3; ...'
或者您可以使用'''
或"""
将命令扩展到多行(当然请注意,如果您使用,"""
则 groovy 将执行字符串插值):
sh """
cmd1
cmd2
cmd3
...
"""
在您的特定情况下,如果您选择选项 2,它将如下所示:
sh '''
TEMPFILE=$(mktemp -p "${PWD}" kubeconfig.XXXXX)
echo "${TEMPFILE}"
'''
警告
如果您要指定特定的 shebang,并且您使用的是多行字符串,则必须将 shebang 紧跟在引号之后,而不是在下一行:
sh """#!/usr/bin/env zsh
cmd1
cmd2
cmd3
...
"""
推荐阅读
- python - 计算以递增顺序排列所需的序列中的反转次数
- wordpress - 通过插件将 wordpress 小部件设置为侧边栏
- react-native - 为什么 EXPO 独立应用程序显示 url_invalid?
- google-cloud-platform - 我们可以将值传递给正在运行的 GCP Cloud Composer 管道吗?
- data-structures - 这个平衡 BST 的复杂性是什么?
- html - 导航栏中的图标需要修复
- javascript - 角度无法从会话存储中获取用户数据
- types - 如何在 Python 中使用静态类型参数
- html - 我将如何复制此图片中的展示位置?
- javascript - 无法在 Vue.Js 中设置属性 'srcObject' 为 null