【发布时间】:2018-12-28 20:43:23
【问题描述】:
我正在尝试使用 docker 代理 (google/cloud-sdk:alpine) 运行 jenkins 管道,以将我的代码部署到 App Engine。不幸的是,尽管我是 docker 的根,但我似乎没有权限这样做。
问题往往与这篇文章中的相同:Jenkins Pipeline gcloud problems in docker 但是这个问题没有正确的答案。
当我手动启动这些命令时,一切正常。
我的 Jenkinsfile 是:
pipeline {
agent {
docker {
image 'registry.hub.docker.com/google/cloud-sdk:alpine'
args '-v $HOME:/home -w /home'
}
}
stages {
stage('Deploy') {
steps {
withCredentials([file(credentialsId: 'bnc-hub', variable: 'SECRET_JSON')]) {
sh '''
set +x
gcloud auth activate-service-account --key-file $SECRET_JSON
gcloud config set project bnc-hub
gcloud app deploy app.yaml
'''
}
}
}
}
}
詹金斯的回报是:
[workspace] Running shell script
+ set +x
WARNING: Could not setup log file in /.config/gcloud/logs, (Error: Could not create directory [/.config/gcloud/logs/2018.12.28]: Permission denied.
Please verify that you have permissions to write to the parent directory.)
script returned exit code 1
【问题讨论】:
-
我不使用 Jenkins,但是从错误消息 gcloud 正在尝试写入 /.config。这需要 root 权限,这意味着没有为运行 Jenkins 的用户(服务)设置 gcloud。
-
问题是我使用云 sdk 的官方 docker 映像:hub.docker.com/r/google/cloud-sdk 当我手动启动我的命令时它可以工作,但不是来自 Jenkins。在这两种情况下,用户都是 root。
-
比较两种情况下的环境变量。
-
我有我的答案。詹金斯没有刷新 gcloud 返回的最后一行:你想继续(Y/n)吗? .所以我处于交互模式。我刚刚在我的请求中添加了一个 --quiet ,现在一切正常!感谢您的支持!
标签: docker jenkins jenkins-pipeline gcloud