如何在Jenkins pipeline中将Git标签推送到远程仓库?

3

我正在为我的项目建立一个CI流程,按照此处提到的官方教程

使用npm构建Node.js和React应用程序.

在我的流程中有一些关键点:

  1. 我的计划是构建源代码、创建Git标记,并将标记推送到Jenkins服务器上的远程Git服务器。
  2. 项目仓库可以公开读取,通过ssh协议从私有Git服务器拉取,该服务器提供了GitLab服务。
  3. 使用Multibranch Pipeline和BlueOcean UI构建了CI流程,并提供了一个ssh公钥,其ID为:jenkins-generated-ssh-key。我已经将其提交到GitLab ssh设置中。
  4. 我的项目根目录包含Jenkinsfile。

文件内容如下:

pipeline {
    agent { docker 'node:6' }
    stages {
        stage('Build') {
            steps {
                sh 'npm run test'
                sh 'npm run build'
            }
        }
        stage('Deploy') {
            steps {
                sshagent (credentials: ['jenkins-generated-ssh-key']) {
                    sh 'git push --tags'
                }
            }
        }
    }
}

'构建'阶段包含git提交和标记步骤。所有推送标签的材料都已准备好。

每次执行'Deploy'阶段时,在推送git标签之前,sshagent都会被终止。

[Pipeline] sshagent
[ssh-agent] Using credentials fe (jenkins-generated-ssh-key)
[ssh-agent] Looking for ssh-agent implementation...
[ssh-agent]   Exec ssh-agent (binary ssh-agent on a remote machine)
$ docker exec d2ba3af75c0e5826d3d00676ebba523117a541d9015ee77c74106862d2665025 env ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-dewb3KyPiizc/agent.130
SSH_AGENT_PID=134
$ docker exec d2ba3af75c0e5826d3d00676ebba523117a541d9015ee77c74106862d2665025 env SSH_AGENT_PID=134 SSH_AUTH_SOCK=/tmp/ssh-dewb3KyPiizc/agent.130 ssh-add /var/jenkins_home/workspace/achilles_master-GZG6BNOXJZHXAGELOPVE2O57MTLCFCSFEEMQVJOWKHCSAQDCMS4Q@tmp/private_key_838589255993535437.key
Identity added: /var/jenkins_home/workspace/achilles_master-GZG6BNOXJZHXAGELOPVE2O57MTLCFCSFEEMQVJOWKHCSAQDCMS4Q@tmp/private_key_838589255993535437.key (rsa w/o comment)
[ssh-agent] Started.
[Pipeline] {
[Pipeline] sh
$ docker exec d2ba3af75c0e5826d3d00676ebba523117a541d9015ee77c74106862d2665025 env SSH_AGENT_PID=134 SSH_AUTH_SOCK=/tmp/ssh-dewb3KyPiizc/agent.130 ssh-agent -k
unset SSH_AUTH_SOCK;
unset SSH_AGENT_PID;
echo Agent pid 134 killed;
[ssh-agent] Stopped.
[achilles_master-GZG6BNOXJZHXAGELOPVE2O57MTLCFCSFEEMQVJOWKHCSAQDCMS4Q] Running shell script
+ git push --tags
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我尝试多次调整Jenkinsfile,发现如果步骤是'git push'或'ssh -T git@git.xxx',它不会获取ssh-agent包装内部步骤。然后我得到了权限被拒绝的错误。ssh-agent总是在执行ssh连接之前被关闭,但会包装其他不需要ssh身份验证的步骤。

1
SSH代理停止可能只是在其他故障日志之前被记录。您会收到“主机密钥验证失败”的消息,因此在处理其他Git问题之前,此答案可能首先有用。 - mkobit
@mkobit 非常感谢。在解决主机验证问题后,我通过了所有步骤。如果您发布此评论并提供一些相关细节,我将接受它。 - Zheeeng
可能是Git inside docker inside Jenkins pipeline doesnt work的重复问题。 - apr_1985
1个回答

0
主机密钥验证失败。致命错误:无法从远程存储库读取。
为解决上述错误,我们需要手动进行一次 SSH 或使用此参数:
StrictHostKeyChecking=no

请提供更多上下文,添加标签并格式化错误和配置。 - xyzale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接