gpt4 book ai didi

git - jenkins,在 shell 脚本中使用 ssh

转载 作者:行者123 更新时间:2023-12-02 13:39:57 29 4
gpt4 key购买 nike

更新:2/7 - 请参阅下面的答案

我似乎无法在脚本内进行 git/ssh checkout 。

什么有效:

我的 jenkins 作业有一个 SSH key 。

Jenkins 通过 GIT 插件从 bitbucket 中检查(通过 SSH)内容,没有任何问题。

我的 Jenkins 工作是这样的:

Jenkins 的工作基本上做了两件事:

  1. 使用 shell 脚本检查 git 模块(在 Linux 机器上)

  2. 使用传递的参数执行 git 模块(即:参数化构建)

该脚本确实(或应该)完成沙箱目录中的所有工作,这涉及检查大约 8 个其他 GIT 模块、根据作为参数化构建的一部分传递的值选择分支等。

我所知道的有效方法以及我发现问题的地方

我有 SSH 代理,并且已启用。我已经验证代理是否存在,通过在脚本中使用 SET 命令,我看到了 SSH_AGENT shell 变量。

在 jenkins 工作结束时,我看到 Jenkins 声明它正在杀死 SSH AGENT。

Jenkins 使用 URL ssh://git@someserver.com/path/to/repo.git - 作为 URL,我使用相同的 URL。

检查 - Jenkins 使用大量命令来完成基本检查。

我的脚本使用相当基本的:“git clone URL DIRECTORY”

当 Jenkins 执行此操作时,它表示它正在使用代理脚本中的 key 。当我的脚本运行时,我没有看到此消息。

我看到很多建议使用 Groovy 脚本或管道作业等。抱歉 - 这对我不起作用,我需要 shell 脚本来完成这项工作。原因:该 shell 脚本用于开发人员环境,我们的 checkout 过程涉及许多模块 - 而 GIT 子模块不适合我

我的 shell 脚本通过“构建步骤 - 执行 Shell”执行

我的 shell 脚本看到代理,但由于某种原因,我不知道为什么/如何无法获取 SSH key 。我也不知道如何测试 key 是否还在?也许 Jenkins 从代理中删除它们?

构建/执行脚本是否支持 SSH 凭据?

(编辑 2/6 - 添加显示问题的示例日志输出)

Jenkins 日志输出

[EnvInject] - Loading node environment variables.
Building remotely on myslave - tiopbld (tiop_linux) in workspace /scratch/jenkins/workspace/pybuilder-testing/shellscript_test.sh
[ssh-agent] Looking for ssh-agent implementation...
[ssh-agent] Exec ssh-agent (binary ssh-agent on a remote machine)
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-PRUTedOo0d7o/agent.16607
SSH_AGENT_PID=16609
[ssh-agent] Started.
$ ssh-add /scratch/jenkins/workspace/pybuilder-testing/shellscript_test.sh@tmp/private_key_2048740533538871194.key
Identity added: /scratch/jenkins/workspace/pybuilder-testing/shellscript_test.sh@tmp/private_key_2048740533538871194.key (/scratch/jenkins/workspace/pybuilder-testing/shellscript_test.sh@tmp/private_key_2048740533538871194.key)
[ssh-agent] Using credentials tiopbld
Cloning the remote Git repository
Cloning repository ssh://git@bitbucket.myserver.com/pybuild/pythonbuilder.git
> git init /scratch/jenkins/workspace/pybuilder-testing/shellscript_test.sh # timeout=10
Fetching upstream changes from ssh://git@bitbucket.myserver.com/pybuild/pythonbuilder.git
> git --version # timeout=10
using GIT_SSH to set credentials jenkins-tiop-myuser
> git fetch --tags --progress ssh://git@bitbucket.myserver.com/pybuild/pythonbuilder.git +refs/heads/*:refs/remotes/origin/*
> git config remote.origin.url ssh://git@bitbucket.myserver.com/pybuild/pythonbuilder.git # timeout=10
> git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
> git config remote.origin.url ssh://git@bitbucket.myserver.com/pybuild/pythonbuilder.git # timeout=10
Fetching upstream changes from ssh://git@bitbucket.myserver.com/pybuild/pythonbuilder.git
using GIT_SSH to set credentials jenkins-tiop-myuser
> git fetch --tags --progress ssh://git@bitbucket.myserver.com/pybuild/pythonbuilder.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 5255667cfed01bdfcecc558a2c63bd6679503fc7 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 5255667cfed01bdfcecc558a2c63bd6679503fc7
Commit message: "test commit from new linus machine"
First time build. Skipping changelog.
[shellscript_test.sh] $ /bin/sh -xe /tmp/jenkins2668814567868620035.sh
+ git clone ssh://git@bitbucket.myserver.com/pybuild/pythonbuilder.git OUTPUTDIR
Cloning into 'OUTPUTDIR'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Build step 'Execute shell' marked build as failure
$ ssh-agent -k
unsetenv SSH_AUTH_SOCK;
unsetenv SSH_AGENT_PID;
echo Agent pid 16609 killed;
[ssh-agent] Stopped.
Unable to connect to Elasticsearch service. Check Elasticsearch is running in the correct namespace
Finished: FAILURE

```

最佳答案

始终仔细检查您的 SSH-KEY key 名称...确保它们的名字不同......例如 - “jenkins-master-to-slave-key”和另一个“jenkins-slave-to-gitrepo”

就我而言,键名有一个字母不同。(在上面)键名称由于其他原因而被 stash 。

关于git - jenkins,在 shell 脚本中使用 ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48635013/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com