【问题标题】:Unable to use gcloud in a jenkins docker-agent无法在 jenkins docker-agent 中使用 gcloud
【发布时间】: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


【解决方案1】:

默认 HOME=/

添加
家=$工作空间 前 gcloud auth activate-service-account --key-file=${GCP_SA}

为我工作

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多