1

TeamCity のビルド構成の 1 つに「testing」という構成パラメーターがあります。こちらの TeamCity REST API doc を見た後、Windows で次の cURL コマンドライン コマンドを使用して、このパラメーターに関する情報を取得できました。

(1) curl -X GET -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters
(2) curl -X GET -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing

応答:

(1) <?xml version="1.0" encoding="UTF-8" standalone="yes"?><property name="testing" value="11"/></properties>
(2) 11

しかし、次のコマンドを使用してこの "testing" ビルド パラメーターを更新しようとすると、エラー メッセージが表示されます。

curl -X PUT -d "1" -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing

応答:

Error has occurred during request processing (Unsupported Media Type).
Error: javax.ws.rs.WebApplicationException
Not supported request. Please check URL, HTTP method and transfered data are correct.

同様のコマンドを使用して、同じビルド構成の buildNumberCounter 設定を更新することに既に成功しています。

curl -X PUT -d "1" -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/settings/buildNumberCounter

そういうわけで、同様の方法でビルド パラメータを使用して同じことができると考えました。ここで何が欠けていますか?

アップデート:

Fiddler を使用して、「testing」ビルド パラメータを値「1」で更新することができました。私が作成したリクエストには、次の内容が含まれていました。

  • リクエスト:PUT
  • URL:http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing
  • リクエスト ヘッダー:Authorization: Basic (...)
  • リクエスト本文:1

したがって、上記の cURL コマンドの問題は、おそらく-d "1"オプションのどこかにあります。しかしここで?

更新 2:

それが違いを生むかどうかはわかりませんが、私はWindows 7 でこのcURL ビルドを使用しています。

4

4 に答える 4

2

失敗した cURL コマンドを修正する代わりに、回避策として、Node.jsを使用して REST リクエストを作成し、TeamCity に送信するようになりました。

node.exe に渡す必要があるスクリプトは次のとおりです。

// Equivalent cURL command:
// curl -X PUT -d "1" -H "Authorization: Basic (...)" http://teamcity:8080/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing

var http = require('http'),
    options = {
        hostname: 'teamcity',
        port: 8080,
        path: '/httpAuth/app/rest/buildTypes/id:bt7/parameters/testing',
        method: 'PUT',
        headers: { 'Authorization': 'Basic (...)' }
    },
    req;

req = http.request(options, function(res) { });

// write data to request body
req.write('1');
req.end();

回避策は完全に機能しますが、上記の cURL コマンドの何が問題なのか知りたいですか?

于 2013-02-21T12:13:18.677 に答える
0

私は入力としてREST API期待XMLしていると思います、追加します

-H "Content-type:text/xml"

XMLを入力として入れます。XMLファイルがある場合file.xml:

curl -d "@/path/to/file.xml" -H "Content-type:text/xml" (...)
于 2013-02-20T14:34:14.130 に答える