英文:
Exposing local Docker daemon to minikube - Jenkins config.json: The system cannot find the path specified
问题
我在Windows 10上运行Jenkins,安装了Docker工具箱和minikube(同样在Windows 10上)。
我可以使用以下PowerShell命令将本地Docker镜像映射到minikube:minikube docker-env | Invoke-Expression
,一切都按预期工作。
我想要在Jenkinsfile中执行相同的操作
stage('Build1') {
steps {
powershell '''
minikube docker-env | Invoke-Expression
'''
}
}
但是Jenkins在错误的位置查找config.json文件:
powershell.exe : *
At C:\Program Files (x86)\Jenkins\workspace\api-gateway_master@tmp\durable-355fdbbe\powershellWrapper.ps1:3 char:1
+ & powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Comm ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (* :String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
X Error getting config: CreateFile C:\Windows\system32\config\systemprofile\.minikube\profiles\minikube\config.json: The system cannot find the path specified.
配置文件实际上位于用户配置文件路径:C:\Users\username\.minikube\profiles\minikube\config.json
。
使用Shell命令(Git for Windows)也出现相同的错误:
stage('Build1') {
steps {
sh 'eval $(minikube docker-env)'
}
}
++ minikube docker-env
*
X Error getting config: CreateFile C:\Windows\system32\config\systemprofile\.minikube\profiles\minikube\config.json: The system cannot find the path specified.
还使用以下开关创建了全新的minikube:-insecure-registry windows 10 IP:5000
编辑:根据评论建议应用后:
在Jenkins中创建了环境变量:
MINIKUBE_HOME=C:\Users\user\.minikube
现在出现以下错误:
++ minikube docker-env
*
X Error getting host status
* Error: [MACHINE_DOES_NOT_EXIST] state: machine does not exist
* Suggestion: Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with
运行minikube delete
后,从Virtual Box中删除minikube VM,删除文件夹C:\Users\user\.minikube
,再次运行minikube start
,没有错误,但在运行Jenkins管道时,仍然出现相同的错误。
英文:
I'm running Jenkins on Windows 10,installed Docker toolbox and minikube (also on Windows 10).
I can "map" local Docker images to minikube with this Powershell command: minikube docker-env | Invoke-Expression
, everything works as expected.
I want to do the same using Jenkinsfile
stage('Build1') {
steps {
powershell """
minikube docker-env | Invoke-Expression
"""
}
}
But Jenkins is looking for config.json file in wrong location:
powershell.exe : *
At C:\Program Files (x86)\Jenkins\workspace\api-gateway_master@tmp\durable-355fdbbe\powershellWrapper.ps1:3 char:1
+ & powershell -NoProfile -NonInteractive -ExecutionPolicy Bypass -Comm ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (* :String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
X Error getting config: CreateFile C:\Windows\system32\config\systemprofile\.minikube\profiles\minikube\config.json: The system cannot find the path specified.
config file is actually in userprofile path:C:\Users\username\.minikube\profiles\minikube\config.json
.
Same error with shell command (Git for Windows)
stage('Build1') {
steps {
sh 'eval $(minikube docker-env)'
}
}
++ minikube docker-env
*
X Error getting config: CreateFile C:\Windows\system32\config\systemprofile\.minikube\profiles\minikube\config.json: The system cannot find the path specified.
Also created brad new minikube with this switch:--insecure-registry windows 10 IP:5000
EDIT:After applying suggestion as per comment:
Created environment variable in Jenkins:
MINIKUBE_HOME=C:\Users\user\.minikube
Now getting:
++ minikube docker-env
*
X Error getting host status
* Error: [MACHINE_DOES_NOT_EXIST] state: machine does not exist
* Suggestion: Run 'minikube delete' to delete the stale VM, or and ensure that minikube is running as the same user you are issuing this command with
Did minikube stop
, deleted minikube VM from Virtual Box,deleted folder C:\Users\user\.minikube
, minikube start
, no errors, but when running Jenkins pipeline, same error.
答案1
得分: 2
如何让Jenkins流水线中的'minikube'集成更顺畅,只需应用上次错误输出中收到的提示。
确保minikube正在与发出此命令的相同用户一起运行。
假设您的Jenkins主服务器以Windows服务形式运行(默认情况下以本地系统帐户的上下文运行),请将其更改为专用的本地用户帐户(例如".\user") - 与您创建minikube实例的相同用户。
另一种选择是在您的流水线中使用专用的凭据。
最终,您可以切换到另一种设置(较困难的方式):
在(Minikube)Kubernetes集群中运行Jenkins,使用Jenkins的Kubernetes插件和Docker外部Docker基于Groovy的流水线(它会重用主机上的Docker守护程序 - 在您的情况下来自Minikube)。
英文:
How about this, to make the 'minikube' integration smooth inside the Jenkins pipeline just apply the hint received on last error output.
> Ensure that minikube is running as the same user you are issuing this
> command with.
Assuming your Jenkins master server is running as a Windows Service (in context of Local System account by default), change it to the dedicated local user account (e.g ".\user") - the same you have created your minikube instance with.
Another option: use dedicated credentials with your Pipeline
Eventually you can switch into another setup (hard way):<br><br>
Running Jenkins inside your (Minikube) Kubernetes cluster with Kubernetes plugin for Jenkins and Docker-outside-of-Docker groovy-based pipeline (it reuses host docker daemon - in your case from Minikube).
答案2
得分: 0
不再需要操作minikube了
- 卸载了minikube
- 卸载了Docker Toolbox
- 安装了Docker Desktop
- 在Docker Desktop中启用了Kubernetes(设置-Kubernetes-启用Kubernetes)
现在所有的Docker镜像都可以在Kubernetes和Jenkins中使用
英文:
No need to mess with minikube anymore
- uninstalled minikube
- uninstalled Docker Toolbox
- installed Docker Desktop
- On Docker desktop enabled Kubernetes (Settings-Kubernetes-enable Kubernetes)
Now all docker images are available to Kubernetes and Jenkins
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论