XCode Bots API配置编辑失败

时间:2016-11-24 16:35:03

标签: xcode api xcode-bots xcode-server

我想通过XCode Bots API更改机器人的方案名称。请求如curl -XPATCH -H'Content-Type:application / json'-H'x-xcsclientversion:8'https://localhost:20343/api/bots/botid123 -d'{“name”:“myawesomebot2”}'来更改机器人名称的工作原理。但是如果我尝试使用像'{“configuration”:{{schemeName“:”scheme2“}}'这样的请求体来更改配置对象,它就会失败。

如何修改方案名称?

1 个答案:

答案 0 :(得分:2)

我终于解决了这个问题,并希望记下完成这项工作所需的部分以及我是如何找到的。

首先,正如您已经注意到的,需要-H "x-xcsclientversion: #"(注意,6对我有用,通过检查收到PATCH请求的Apple的Javascript来发现)

其次,在看了Xcode Server通过Charles更新机器人之后,可以看到URL需要添加以下参数?overwriteBlueprint=true

第三,似乎JSON数据在最顶层name:,也需要requiresUpgrade=falsetype=1I found the tool jq才具有价值)

第四,对sourceBlueprint的更改需要configuration.sourceControlBlueprint.DVTSourceControlWorkspaceBlueprintIdentifierKey才能收到新的UUID。通过uuidgen命令在bash中轻松生成。

第五,必须发送大部分完整的机器人描述。我通过Apple的API抓取机器人的JSON定义,然后使用jq修改它(见上文),删除不必要的键/值对,以匹配Xcode Server自己的API调用。必要的键/值对似乎是:

  • 名称
  • requiresUpgrade
  • 配置(根据需要进行修改,但必须发送完整配置)
  • 组(保持原样,但通过发送回来)

第六,反斜杠 - 转义JSON有效负载中的所有正斜杠。我在使用ESCAPED_JSON=${BOT_CONFIG_JSON//\//\\\/}的bash中完成了此操作,并在curl命令中发送了-d "$ESCAPED_JSON"

因此,我正在使用的完整curl命令变为:

curl -k --request PATCH -H "Content-Type: application/json" -H "x-xcsclientversion: 6" -d "$ESCAPED_JSON" https://<username>:<password>@<your_server_address>:20343/api/bots/<your_bot_id>?overwriteBlueprint=true

一个完整的JSON定义(记住,它必须在发送之前转发正斜杠)看起来像这样

<!-- language: lang-json -->
  "requiresUpgrade": false,
  "configuration": {
    "triggers": [
      {
        "phase": 1,
        "scriptBody": "<REDACTED>",
        "type": 1,
        "name": "Update github Pending",
        "conditions": {
          "status": 2,
          "onSuccess": true,
          "onAnalyzerWarnings": true,
          "onBuildErrors": true,
          "onWarnings": true,
          "onFailingTests": true
        }
      },
      {
        "phase": 2,
        "scriptBody": "<REDACTED>",
        "type": 1,
        "name": "Upload to Beta",
        "conditions": {
          "status": 2,
          "onSuccess": true,
          "onAnalyzerWarnings": true,
          "onBuildErrors": false,
          "onWarnings": true,
          "onFailingTests": false
        }
      },
      {
        "phase": 2,
        "scriptBody": "<REDACTED>",
        "type": 1,
        "name": "Update github status",
        "conditions": {
          "status": 2,
          "onSuccess": true,
          "onAnalyzerWarnings": true,
          "onBuildErrors": false,
          "onWarnings": true,
          "onFailingTests": false
        }
      }
    ],
    "performsUpgradeIntegration": true,
    "disableAppThinning": true,
    "deviceSpecification": {
      "filters": [
        {
          "platform": {
            "_id": "3c884e2499df662057e8c64580003419",
            "displayName": "iOS",
            "_rev": "8-51c114fcfc83ea5f36df66f119b34ec8",
            "simulatorIdentifier": "com.apple.platform.iphonesimulator",
            "identifier": "com.apple.platform.iphoneos",
            "buildNumber": "14C89",
            "version": "10.2"
          },
          "filterType": 3,
          "architectureType": 0
        }
      ],
      "deviceIdentifiers": [
        "6d928bd891b83b4b8592aedb42001a97",
        "6d928bd891b83b4b8592aedb4200776c",
        "fa737f03db7b6c04d4c7f9507100700f"
      ]
    },
    "periodicScheduleInterval": 0,
    "schemeName": "<REDACTED>",
    "codeCoveragePreference": 2,
    "performsTestAction": true,
    "scheduleType": 3,
    "performsArchiveAction": true,
    "builtFromClean": 2,
    "buildConfiguration": "Release",
    "performsAnalyzeAction": true,
    "sourceControlBlueprint": {
      "DVTSourceControlWorkspaceBlueprintLocationsKey": {
        "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1": {
          "DVTSourceControlWorkspaceBlueprintLocationTypeKey": "DVTSourceControlLockedRevisionLocation",
          "DVTSourceControlLocationRevisionKey": "9d38dc7507f0f6ac17072d721893f0021c5282ed"
        },
        "51DBFAD1848AC646B864BBBEDC625B8BAB305A76": {
          "DVTSourceControlBranchIdentifierKey": "<THE BRANCH TO WATCH>",
          "DVTSourceControlBranchOptionsKey": 4,
          "DVTSourceControlWorkspaceBlueprintLocationTypeKey": "DVTSourceControlBranch"
        }
      },
      "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey": "51DBFAD1848AC646B864BBBEDC625B8BAB305A76",
      "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey": {},
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryAuthenticationStrategiesKey": {
        "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1": {
          "DVTSourceControlWorkspaceBlueprintRemoteRepositoryAuthenticationTypeKey": "DVTSourceControlAuthenticationStrategy"
        },
        "51DBFAD1848AC646B864BBBEDC625B8BAB305A76": {
          "DVTSourceControlWorkspaceBlueprintRemoteRepositoryAuthenticationTypeKey": "DVTSourceControlAuthenticationStrategy"
        }
      },
      "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey": {
        "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1": 0,
        "51DBFAD1848AC646B864BBBEDC625B8BAB305A76": 0
      },
      "DVTSourceControlWorkspaceBlueprintIdentifierKey": "<GENERATE A NEW UUID FOR THIS!!!>",
      "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey": {
        "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1": "<REDACTED PATH 1>",
        "51DBFAD1848AC646B864BBBEDC625B8BAB305A76": "<REDACTED PATH 2>"
      },
      "DVTSourceControlWorkspaceBlueprintNameKey": "Cool Blueprint",
      "DVTSourceControlWorkspaceBlueprintVersion": 204,
      "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey": "<REDACTED>.xcworkspace",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey": [
        {
          "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey": "git@github.com:<REDACTED REPO 1>",
          "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey": "com.apple.dt.Xcode.sourcecontrol.Git",
          "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey": "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1"
        },
        {
          "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey": "git@github.com:<REDACTED REPO 2>",
          "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey": "com.apple.dt.Xcode.sourcecontrol.Git",
          "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey": "51DBFAD1848AC646B864BBBEDC625B8BAB305A76"
        }
      ]
    },
    "exportsProductFromArchive": true,
    "weeklyScheduleDay": 0,
    "minutesAfterHourToIntegrate": 0,
    "testingDestinationType": 0,
    "hourOfIntegration": 0,
    "testingDeviceIDs": []
  },
  "group": {
    "name": "41A62776-A72E-44C0-BFF0-D91F699BBA6A"
  },
  "type": 1,
  "name": "My Cool Integration Bot"

我希望这会有所帮助。