github中的Jenkinsfile和terraform模块:如何通过密钥进行身份验证?

Posted

技术标签:

【中文标题】github中的Jenkinsfile和terraform模块:如何通过密钥进行身份验证?【英文标题】:Jenkinsfile and terraform modules in github: how to authenticate by key? 【发布时间】:2020-11-16 19:47:13 【问题描述】:

我有:

带有 Terraform12 代码的主 github 存储库 二级仓库中的模块,称为source = "git@github.com:user/mod_repo?ref=v1.0.0" Jenkins 2.249(现在无法更新) Jenkins 中用于访问mod_repo 的私有 ssh 密钥

当我尝试在 Jenkins 管道中运行 terraform init 时,我得到了

Could not download module "vpc" (main.tf:1) source code from
"git@github.com:user/mod_repo?ref=v1.0.0": error downloading
'ssh://git@github.com/user/mod_repo?ref=v1.0.0': /usr/bin/git exited
with 128: Cloning into '.terraform/modules/vpc'...
Permission denied (publickey).

在本地我可以毫无问题地做到这一点。 我应该如何配置Jenkinsfile* 中的密钥(或其他地方?)以允许访问辅助存储库?

我见过this、this、this 和this,但不知道如何将它们连接在一起。

【问题讨论】:

【参考方案1】:

您需要使用 sshagent 并将您的密钥传递给它,像这样

sshagent (credentials: ['my-build-ssh-key']) 
    sh 'terraform init'
    withAWS(credentials: 'aws-build')
        sh 'terraform apply -lock=false -auto-approve'
    

应首先将密钥添加到 Jenkins 的凭据部分,然后名称将代替 my-build-ssh-key

这意味着当您运行 terraform init 时,它可以在拉入模块时使用该密钥。

在该示例中,它还使用存储在 Jenkins 中的凭据以及此插件 (https://www.jenkins.io/doc/pipeline/steps/pipeline-aws/) 与 AWS 通信并启动您的堆栈。

【讨论】:

以上是关于github中的Jenkinsfile和terraform模块:如何通过密钥进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Terra 绘图时,alpha 参数无法按预期工作

使用 Intellij Idea 在 Java 项目中突出显示 Jenkinsfile 语法

Jenkinsfile之语法

jenkins流水线(jenkinsfile)详解,保姆式教程

Terra R - 使用自定义函数加速栅格数据的聚合()

了解 raster::extract 和 terra:extract