通过Skaffold向Jib传递Gradle属性失败,报错未知属性如何解决?
问题分析:Gradle Jib配置中
githubPassword未识别错误 问题场景
你在Gradle构建文件中配置了Jib镜像构建,使用githubUser和githubPassword作为镜像仓库认证信息:
def baseImage = 'ghcr.io/tobias-neubert/eclipse-temurin:17.0.2_8-jre' jib { from { image = baseImage auth { username = githubUser password = githubPassword } } to { image = 'ghcr.io/tobias-neubert/motd-service:0.0.1' auth { username = githubUser password = githubPassword } } }
同时在skaffold.yaml中通过Jib的args传递属性参数:
apiVersion: skaffold/v4beta1 kind: Config metadata: name: motd-service build: artifacts: - image: ghcr.io/tobias-neubert/motd-service jib: args: - "-PgithubUser=tobias-neubert" - "-PgithubPassword=secret" manifests: rawYaml: - k8s/deployment.yaml - k8s/istio.yaml
执行构建时出现错误:
Could not get unknown property 'githubPassword'
错误原因
直接在Gradle配置中使用githubPassword这类变量名时,Gradle会将其视为Groovy本地变量,但你并没有在构建脚本中定义过这个变量。而通过Skaffold传递的-P参数属于Gradle项目属性,并非Groovy本地变量,无法直接通过变量名访问,必须通过Gradle提供的属性获取方式读取。
解决方法
方法1:直接通过project.property()读取项目属性
修改Gradle的Jib配置,将认证信息的读取方式改为从项目属性中获取:
def baseImage = 'ghcr.io/tobias-neubert/eclipse-temurin:17.0.2_8-jre' jib { from { image = baseImage auth { username = project.property('githubUser') password = project.property('githubPassword') } } to { image = 'ghcr.io/tobias-neubert/motd-service:0.0.1' auth { username = project.property('githubUser') password = project.property('githubPassword') } } }
如果属性可能不存在(比如本地调试时),可以用findProperty()避免报错:
username = project.findProperty('githubUser') ?: 'default-user' password = project.findProperty('githubPassword') ?: 'default-pass'
方法2:先定义本地变量接收项目属性
在Gradle脚本开头先定义变量,接收项目属性(同时可兼容环境变量,更灵活):
def githubUser = project.findProperty('githubUser') ?: System.getenv('GITHUB_USER') def githubPassword = project.findProperty('githubPassword') ?: System.getenv('GITHUB_PASSWORD') def baseImage = 'ghcr.io/tobias-neubert/eclipse-temurin:17.0.2_8-jre' jib { from { image = baseImage auth { username = githubUser password = githubPassword } } to { image = 'ghcr.io/tobias-neubert/motd-service:0.0.1' auth { username = githubUser password = githubPassword } } }
内容的提问来源于stack exchange,提问作者Tobias Neubert
相关产品推荐
相关产品推荐

