在詹金斯中执行 RSYNC 命令

JAT*_*007 7 linux deployment continuous-integration jenkins

我正在尝试将我的代码部署到远程服务器。到目前为止我已经尝试过

  • 通过 SSH 插件发布:问题是我无法保留文件权限
  • rsync 命令:这保留了文件权限,但问题是我不知道如何设置密码使其自动工作

这就是我得到的:

[JenkinsBuild] $ /bin/sh -xe /var/lib/jenkins/tmp/hudson4646064064846581974.sh
+ rsync -PSauve ssh --exclude=JenkinsBuild app bower.json config gruntfile.js karma.conf.js LICENSE.md Makefile node_modules package.json Procfile protractor.conf.js public README README.md server.js john@192.168.2.10:/srv/dp/prod
Host key verification failed.
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(600) [sender=3.0.6]
Run Code Online (Sandbox Code Playgroud)

任何想法我在这里做错了什么?

JAT*_*007 3

好吧,我替换了know_host 文件,但仍然遇到问题。因此,对于任何对know_host文件有问题的人,您可以通过执行以下操作来修复有问题的密钥:

ssh-keygen -R hostnameOfOfendingKey
Run Code Online (Sandbox Code Playgroud)

这将删除有问题的密钥,现在您的known_host 文件又可以工作了。

现在要解决其他问题,我在其他地方找到了答案:/sf/ask/1802879291/#25770519

这就是我解决这个问题的方法

sudo su jenkins -s /bin/bash
Run Code Online (Sandbox Code Playgroud)

然后,作为 jenkins 用户,将我的 ssh 密钥复制到我想要连接/执行命令的服务器,等等

ssh-copy-id myuser@TheRemoteserver.com
Run Code Online (Sandbox Code Playgroud)

然后它会向您呈现这个

myuser@TheRemoteserver.com's password: 
Now try logging into the machine, with "ssh 'myuser@TheRemoteserver.com'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
Run Code Online (Sandbox Code Playgroud)

然后我这样做是为了测试目的:

bash-4.1$ rsync -PSauve ssh --exclude=JenkinsBuild /srv/pd/* myuser@TheRemoteserver.com:/srv/pdc/test1  
Run Code Online (Sandbox Code Playgroud)

它没有要求密码或任何东西就通过了。请注意,我仍然以 jenkins 身份登录。

因此,现在当我使用一些 shell 命令创建 Jenkins 作业作为构建的一部分时,它将按预期工作:D