【问题标题】:Jenkins and Vagrant there is very strange situationJenkins和Vagrant出现了很奇怪的情况
【发布时间】:2017-06-21 13:19:36
【问题描述】:

我有一个最新版本的 Jenkis(在 Tomcat 下运行)以及 Vagrant 和 LXC 容器。 Tomcat 在jenkins 用户下运行。我有下一个 Vagrantfile

Vagrant.configure(2) do |config|
  config.vm.box = "arjenvrielink/xenial64-lxc"
  config.vm.provider :lxc do |lxc|
    lxc.backingstore = 'dir'
  end
end

所以,当我通过 vagrant up 从 bash 运行 lxc 容器时,一切都很好。 vagrant ssh 工作。但如果我通过 Jenkins 作业运行它,我会得到这个

Started by user admin
[EnvInject] - Loading node environment variables.
Building in workspace /home/jenkins/workspaces/server
[server] $ /bin/bash /opt/tomcat/temp/jenkins204809790857124992.sh
Bringing machine 'default' up with 'lxc' provider...
==> default: Importing base box 'arjenvrielink/xenial64-lxc'...
==> default: Checking if box 'arjenvrielink/xenial64-lxc' is up to date...
==> default: Setting up mount entries for shared folders...
    default: /vagrant => /home/jenkins/workspaces/server/vagrant
==> default: Starting container...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 10.0.3.29:22
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Authentication failure. Retrying...
    default: Warning: Authentication failure. Retrying...
Build was aborted
Aborted by admin
Finished: ABORTED

Jenkins 作业仅包含这些命令

!#/bin/bash
cd vagrant
vagrant up

在调查过程中,我发现下一个不同。然后我从 bash 中跑出 vagrant ssh-config 这个:

Host default
  HostName 10.0.3.212
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/jenkins/workspaces/server/vagrant/.vagrant/machines/default/lxc/private_key
  IdentitiesOnly yes
  LogLevel FATAL

但后来我从 Jenkins 的工作中跑了出来,我得到了这个

Host default
  HostName 10.0.3.217
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/jenkins/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

我做错了什么?

【问题讨论】:

    标签: linux jenkins ssh vagrant lxc


    【解决方案1】:

    编辑:

    arjenvrielink/xenial64-lxcan official box 所以我仍然很确定你的问题出在 vagrant insecure key replacement mecanism 上,但我的解决方案对你没有帮助。


    arjenvrielink/xenial64-lxc 是自定义框吗?

    如果是这样,请确保将不安全的密钥放入其中,以便任何新用户(包括 Jenkins)都可以访问该框,因为首先 vagrant 使用不安全的密钥连接到该框,然后创建一个新的。

    如果您想在框中包含自己的密钥,请确保将以下行添加到您的 Vagrantfile:

    Vagrant.configure("2") do |config|
      config.ssh.private_key_path = File.expand_path("<path of the key relative to Vagrantfile>", __FILE__)
    end
    

    需要注意的是,您必须在 vagrant 环境将运行的任何地方都提供密钥。

    【讨论】:

    • 对不起,但不是。我像临时解决方案一样设置了 Jenkins 的 DEP 版本。没有任何问题像一个。但我发现了一件事。然后我使用了 Tomcat 版本,tmp 文件夹位于 Tomcat 主文件夹中。然后我使用 DEP 包 tmp 文件夹在根目录下。也许这是解决问题的关键。我稍后会检查。
    • 对不起,我不明白。 “我像临时解决方案一样设置了 Jenkins 的 DEP 版本”是什么意思?句子“没有任何问题。但我发现了一件事。”不明白你到底想说什么?无论如何,您遇到的错误“默认:警告:身份验证失败。重试...”来自 vagrant SSH 密钥的问题,与 tomcat 甚至真的 jenkins 恕我直言无关。
    • 您的脚本也执行“cd vagrant”,但相对于确切的位置?
    • 我只有一个用户帐户,它是 Jenkins。我用于所有任务的此帐户。所以连Tomcat都是在这个账号下运行的。我尝试运行相同的任务。我想通过 vagrant up 运行 lxc 容器。但是当我在Tomcat下运行像Jenkins作业这样的命令时,我得到“默认:警告:身份验证失败。重试......”如果我在同一帐户下的bash下运行它,我没有这个错误。你明白d吗?我在相同权限下完成的所有任务。和同一个文件夹。如果我使用像 java 应用程序(Ubuntu 的 dep 包)这样的 Jenkins,我也没有同样的问题。好吗?
    • 所以问题的根源是我认为的 Tomcat 设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多