通过Perl脚本登录Jenkins
我可以使用以下程序更改构建的描述。这将把构建的描述更改为“FOO-FOO-FOO”。不幸的是,我的登录不起作用。现在,这个测试Jenkins构建服务器上没有安全性。但是,在我们的常规Jenkins服务器上,您需要登录才能更改生成的描述:通过Perl脚本登录Jenkins,perl,jenkins,lwp-useragent,Perl,Jenkins,Lwp Useragent,我可以使用以下程序更改构建的描述。这将把构建的描述更改为“FOO-FOO-FOO”。不幸的是,我的登录不起作用。现在,这个测试Jenkins构建服务器上没有安全性。但是,在我们的常规Jenkins服务器上,您需要登录才能更改生成的描述: #! /usr/bin/env perl use 5.12.0; use warnings; use LWP::UserAgent; use HTTP::Request::Common qw(POST); use Data::Dumper; use con
#! /usr/bin/env perl
use 5.12.0;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use Data::Dumper;
use constant {
JENKINS_BASE => "http://build.vegibank.com/",
USER_ID => "buildguy",
PASSWORD => "swordfish",
};
use constant {
LOGIN_URL => JENKINS_BASE . '/j_acegi_security_check',
JOB_URL => JENKINS_BASE . '/job',
SUBMIT_DESCRIPTION => 'submitDescription',
};
my $job_number = 4;
my $job_name = "proginator-2.0";
my $description = "FOO FOO FOO";
my $user_agent = LWP::UserAgent->new or die qq(Can't get User Agent);
#
# My Login Stuff (but it doesn't do anything w/ security off
#
my $response = $user_agent->request (
POST LOGIN_URL,
[
j_username => USER_ID,
j_password => PASSWORD,
],
);
$response = $user_agent->request (
POST "@{[JOB_URL]}/$job_name/$job_number/@{[SUBMIT_DESCRIPTION]}",
[
description => "$description",
],
);
我正在尝试连接到Jenkins登录会话,但我认为我做得不太正确。当我尝试登录时,我得到一个302
响应和以下我的响应对象转储:
$VAR1 = bless( {
'_protocol' => 'HTTP/1.1',
'_content' => '',
'_rc' => '302',
'_headers' => bless( {
'connection' => 'close',
'client-response-num' => 1,
'set-cookie' => 'JSESSIONID=1D5DF6FAF8714B2ACA4D496FBFE6E983; Path=/jenkins/; HttpOnly',
'location' => 'http://build.vegicorp.com/;jsessionid=1D5DF6FAF8714B2ACA4D496FBFE6E983',
'date' => 'Mon, 13 May 2013 20:02:35 GMT',
'client-peer' => '10.10.21.96:80',
'content-length' => '0',
'client-date' => 'Mon, 13 May 2013 20:02:35 GMT',
'content-type' => 'text/plain; charset=UTF-8',
'server' => 'Apache-Coyote/1.1'
}, 'HTTP::Headers' ),
'_msg' => 'Moved Temporarily',
'_request' => bless( {
'_content' => 'j_username=buildguy&j_password=swordfish',
'_uri' => bless( do{\(my $o = 'http://build.vegicorp.com/j_acegi_security_check')}, 'URI::http' ),
'_headers' => bless( {
'user-agent' => 'libwww-perl/6.03',
'content-type' => 'application/x-www-form-urlencoded',
'content-length' => 42
}, 'HTTP::Headers' ),
'_method' => 'POST',
'_uri_canonical' => $VAR1->{'_request'}{'_uri'}
}, 'HTTP::Request' )
}, 'HTTP::Response' );
我想我必须找到一个有效的页面,因为我得到的是302代码,但是我的字段可能不正确(或者我进入了错误的页面)
有人能帮忙吗?我看到了登录成功时的重定向——它设置会话cookie并将您重定向到主页 您的post可能会失败,因为UA对象没有持久化会话cookie。根据文档,“默认情况下没有cookie_jar,即从不自动向请求添加“cookie”头。”尝试:
my $ua = LWP::UserAgent->new( cookie_jar => HTTP::Cookies->new() );
存储和重用描述更改帖子的会话
(此外,凭据在您的标题转储中可见,可能需要编辑…编辑:我是个白痴,它们也在您的常量中,可能是假的。)我的授权失败,因为…技术术语是什么?哦,是的。。。“都做错了。” 在谷歌搜索了很多无用的垃圾后,我兴高采烈地决定看看詹金斯的网站上是否有这方面的内容。而且,它就在一个叫做。事实上,他们甚至给出了一个答案 哈哈,我太努力了。Jenkins似乎将使用基本的HTTP身份验证机制,我不必通过连接来试图弄清楚他们的登录表单是如何工作的。显然,Jenkins正在为您简化基本的身份验证机制,即使您的身份验证机制远不是基本的——就像一个好的程序应该做的那样 所以,我所要做的就是使用基本的身份验证机制
my $browser = LWP::UserAgent->new or die qq(Cannot get User Agent);
my $request = HTTP::Request->new;
$request->authorization_basic(USER_ID, PASSWORD);
$request->method("GET");
$request->url("$jenkins_url");
my $response = $browser->request($request);
if ( not $response->is_success ) {
die qq(Something went horribly wrong...);
}