【问题标题】:AWS CodePipeline advanced tutorial with jenkins使用 jenkins 的 AWS CodePipeline 高级教程
【发布时间】:2016-01-23 14:33:36
【问题描述】:

我正在通过 AWS CodePipeline 教程运行并且有 this step

说我必须创建一个运行 bash 脚本的 jenkins 作业,该脚本将连接到 EC2 实例(不是运行 jenkins 的那个,而是之前部署了代码的那个)。

据说我必须通过在bash脚本中运行这个命令来连接到EC2实例:

TEST_IP_ADDRESS=192.168.0.4 rake test

但我的直觉是这一步是完全错误的。

没有同名的变量,也没有像这样连接到外部实例的选项。

我已经成功完成了所有步骤,但这一步显然是错误的

【问题讨论】:

  • 好像是在设置环境变量。您是否按照说明(包括此说明)进行操作,但后来出现了问题?
  • 是的,确实,我运行管道(或自行运行 Jenkins 作业)并且 Jenkins 控制台日志输出显示命令“rake test”正在托管 Jenkins 的实例上执行,而不是在部署代码的地方。我想它应该根据 AWS 教程在另一个实例上执行命令。

标签: amazon-web-services jenkins aws-code-deploy aws-codepipeline


【解决方案1】:

bash 脚本将在您的 jenkins 实例中运行,并将 make an HTTP request 发送到您在 TEST_IP_ADDRESS 中配置的实例。

当您添加“构建步骤”并选择“执行 shell”时,您将输入以下内容:

TEST_IP_ADDRESS=192.168.0.4 rake test

您正在定义 TEST_IP_ADDRESS 变量,因此由您决定给它一个适当的值。

【讨论】:

  • 是的,这很清楚,但问题是,没有像 TEST_IP_ADDRESS 这样的变量(在 jenkins 变量列表中),并且从未使用过。所以命令是在 jenkins 服务器上运行“rake test”,而不是按照教程中的建议在远程服务器上运行。
  • TEST_IP_ADDRESS 不是詹金斯变量,它是一个环境变量。当您添加类型为“Execute shell”的构建步骤时,您将键入应该执行的命令(在您的 jenkins 实例之一中)。作为命令的一部分,您将定义 TEST_IP_ADDRESS 变量:TEST_IP_ADDRESS=192.168.0.4 rake test。您必须输入远程服务器的 IP 地址,但这并不意味着该命令将在该服务器上执行,它只是用于构建 HTTP 请求 URL。
【解决方案2】:

首先我有同样的困惑,然后我看到了源代码,它非常不言自明:

#!/usr/bin/env ruby

require 'net/http'
require 'minitest/autorun'
require 'socket'

class JenkinsSampleTest < MiniTest::Unit::TestCase
  def setup
    uri_params = {
      :host => ENV['TEST_IP_ADDRESS'] || 'localhost',
      :port => (ENV['TEST_PORT'] || '80').to_i,
      :path => '/index.html'
    }
    @webpage = Net::HTTP.get(URI::HTTP.build(uri_params))
  end

  def test_congratulations
    assert(@webpage =~ /Congratulations/)
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2018-03-18
    • 2012-02-03
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2018-07-18
    相关资源
    最近更新 更多