当前位置: 首页 > 面试题库 >

如何在github组织Jenkins工作流中检出ssh remote并在Jenkinsfile中使用ssh凭据

闾丘正志
2023-03-14
问题内容

Github Organisation在詹金斯有一件东西。在存储库的根目录中,我Jenkinsfile看起来像这样:

node {

  def jenkinsCredsId = 'xxxxxxxx-yyyy-zzzz-aaaa-bbbbbbbbbbbb'

  stage 'Checkout'
  checkout scm
  // I also tried the following:
  // checkout scm: [$class: 'GitSCM', source: 'ssh://git@github.com:MY_ORGANISATION/jenkins-testing-temp.git', clean: true, credentialsId: jenkinsCredsId]

  stage 'Build'
  // generate some artefact (dist.zip)

  stage 'Release'

  sshagent([jenkinsCredsId]) {
    sh '''
    git remote -v // show remotes
    ssh-add -l // show currently loaded ssh keys fingerprints

    git fetch --all --tags // IT FAILS HERE

    CURRENT_BUILD_TAG="some_build/${BUILD_NUMBER}"
    git tag ${CURRENT_BUILD_TAG}

    git push --tags

    github-release release \
    --security-token ${GITHUB_RELEASE_TOKEN} \
    --user MY_ORGANIZATION \
    --repo MY_REPO \
    --tag ${CURRENT_BUILD_TAG} \
    --name ${CURRENT_BUILD_TAG}

    github-release upload \
    --security-token ${GITHUB_RELEASE_TOKEN} \
    --user MY_ORGANIZATION \
    --repo MY_REPO \
    --tag ${CURRENT_BUILD_TAG} \
    --name ${CURRENT_BUILD_TAG} \
    --file dist.zip
    '''
  }

这里有几行用于测试存储库访问的行,并且当前由于git fetch部分错误而失败:

致命:无法读取“的用户名
”https://github.com ‘:没有此类设备或地址

git remote -v上面的命令Jenkinsfile输出
类似的内容origin https://github.com/MY_ORGANIZATION/MY_REPO。


问题答案:

事实证明,该Github Organization项目只使用HTTPS证书的Scan credentials(如上图中)。

解决方案是点击Advanced按钮,然后sshCheckoutcredentials下拉列表中实际选择一个凭证,而不是默认值- Same as scan credentials -

高级视图签出凭证

请注意,带有星号的凭据是用户/密码条目,这就是我发现
问题的方式。

这样,checkout scm将使用ssh代替,并且该sshagent([jenkinsCredsId]) {块将按预期工作,让您可以根据自己的权利创建标签,提取和推送。:)



 类似资料:
  • 在我的单元测试中,我使用<code>aws sdk 一开始,我试图将值设置为<code>~/。aws/credentials使用github工作流中的run命令: 原来我的测试文件: 我试图用另一种方式在我的测试中获得证书,但也不起作用: 最后,我尝试创建一个自定义的Action(使用动作js库,如:@action/core、@action/io、@action/exec),以获取AWS env值

  • 问题内容: 我想使用scp / ssh将一些文件上传到服务器。我发现我需要使用基于证书的身份验证,但是问题是如何?我真正想做的就是使用与git一起使用的相同种类的凭据- 存储在Jenkins中的密码ssh证书。但是,我无法解决该问题-代码段生成器对此没有明显的选择。 别人做什么?是否有未记录的功能可以做到这一点? 问题答案: 如果安装SSH代理插件,则可以使用管道步骤在ssh- agent处于活动

  • 问题内容: 我是github组织的所有者,可以访问所有存储库。其中一些是私人的,其他则是公共的。我正在尝试将Jenkins设置为在向组织的任何存储库发出拉取请求时触发构建。问题是我有一个外部系统,每当发出请求时,它就会通过github webhooks通知。我必须将Jenkins与此系统集成在一起。该系统还可以通过api请求触发到Jenkins的通知。(https://python- jenkin

  • 问题内容: 在安装了“版本号插件”的Jenkinsfile中尝试此步骤: 并得到此错误: 在Jenkinsfile中使用此插件的正确方法是什么? 问题答案: 您需要使用它作为步骤。 看一看https://your_jenkins_url.com/pipeline- syntax/ 并检查已剪切生成器中VersionNumber步骤的所有选项。

  • java.lang.NoSuchMethodError:在步骤中找不到这样的DSL方法“PublishOversh”[archive,bat,build,catchError,checkout,deleteDir,dir,dockerFingerprintFrom,Docker FingerPrintRun,echo,emailext,EmailExtrecients,envVarsForTool

  • 我正试图通过遵循本教程,使用GitHub操作构建docker映像并将其推送到Amazon ECR 我正在尝试为此repo设置GitHub操作,因此我在<代码>中创建了一个新的工作流。github/workflows目录。 DockerFile已成功创建并生成。 现在,在创建