如何在 Jenkins 中处理 github webhook 负载?

2024-03-27

我目前正在通过 GitHub Webhook 触发我的 Jenkins 构建。我将如何解析 JSON 有效负载?如果我尝试参数化我的构建并使用 $payload 变量,GitHub webhook 将失败并出现以下错误:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 400 This page expects a form submission</title>
</head>
<body><h2>HTTP ERROR 400</h2>
<p>Problem accessing /job/Jumph-CycleTest/build. Reason:
<pre>    This page expects a form submission</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                
<br/>                                                

</body>
</html>

如何让我的 GitHub Webhook 与参数化 Jenkins 构建一起使用,以及如何解析 Webhook 有效负载以使用某些行(例如提交者的用户名)作为构建中的条件?


有一些技巧可以让它发挥作用,我发现了(现已不复存在)chloky.com博客文章对大部分内容都有帮助。因为听起来您至少已经让 Webhook 与您的 Jenkins 实例进行通信,所以我现在将跳过这些步骤。但是,如果您想要更多详细信息,只需滚动到我的答案末尾即可查看我能够从中抢救的内容chloky.com- 我不知道原作者,这些信息可能已经过时,但我确实发现它很有帮助。

总而言之,您可以执行以下操作来处理有效负载:

  1. 在 Jenkins 作业中设置一个名为“payload”的字符串参数。如果您计划手动运行构建,那么在某个时候为其提供一个默认的 JSON 文档可能是一个好主意,但您现在不需要一个。这个参数名称似乎区分大小写(我使用的是 Linux,所以这并不奇怪......)
  2. 在github中设置webhook以使用带有参数的构建端点而不是build端点,即http://<<yourserver>>/job/<<yourjob>>/buildWithParameters?token=<<yourtoken>>

  3. 配置要使用的 Webhook应用程序/x-www-form-encoded代替应用程序/json。前一种方法将 JSON 数据打包在一个名为“payload”的表单变量中,这大概就是 Jenkins 将其分配给环境变量的方式。这应用程序/json方法只是 POST 原始 JSON,它似乎无法映射到任何东西(我无法让它工作)。您可以通过将 webhook 指向类似的内容来查看差异请求箱 http://stedolan.github.io/jq/并检查结果。

  4. 此时,您应该得到您的$payload当你开始构建时变量。要解析 JSON,我强烈建议安装jq https://jqplay.org/在你的 Jenkins 服务器上尝试一些解析语法here https://i.stack.imgur.com/r9Z1e.png。 JQ 特别好,因为它是跨平台的。
  5. 从这里开始,只需将 JSON 中的所需内容解析为其他环境变量即可。与条件构建步骤相结合,这可以为您提供很大的灵活性。

希望这可以帮助!


EDIT这是我可以从原始博客文章中获取的内容http://chloky.com/tag/jenkins/,已经死了一段时间了。 希望此内容对某人也有用。


帖子 #1 - 2012 年 7 月

Github 提供了一种很好的方法,每当针对存储库进行提交时,都会向 jenkins 等 CI 系统发出通知。这对于在 jenkins 中启动构建作业以测试刚刚在存储库上进行的提交非常有用。您只需转到存储库的管理部分,单击左侧的服务挂钩,单击列表顶部的“webhook URLs”,然后输入 jenkins 所需的 webhook 的 URL(查看这个詹金斯插件 https://wiki.jenkins.io/display/JENKINS/GitHub+Plugin用于设置 jenkins 以从 github 接收这些钩子)。

不过最近,我正在寻找一种方法,在针对存储库发出拉取请求时而不是在对存储库进行提交时触发 Webhook。这样我们就可以让 jenkins 在决定是否合并拉取请求之前对拉取请求运行一堆测试 - 当您有很多开发人员在自己的分叉上工作并定期向主分支提交拉取请求时非常有用回购。

事实证明,这并不像人们希望的那么明显,并且需要对 github API 进行一些修改。

默认情况下,当您配置 github webhook 时,它被配置为仅在针对存储库进行提交时触发。当您设置 webhook 时,没有简单的方法可以在 github Web 界面中查看或更改这一点。为了以任何方式操作 webhook,您需要使用 API。

要通过 github API 对存储库进行更改,我们需要自行授权。我们将使用curl,所以如果我们愿意,我们可以每次传递我们的用户名和密码,如下所示:

# curl https://api.github.com/users/mancdaz --user 'mancdaz'
Enter host password for user 'mancdaz':

或者,如果您想编写这些内容的脚本,这是一个更好的选择,我们可以获取一个 oauth 令牌并在后续请求中使用它,从而不必继续输入密码。这就是我们在示例中要做的事情。首先我们需要创建一个 oauth 授权并获取令牌:

curl https://api.github.com/authorizations --user "mancdaz" \
--data '{"scopes":["repo"]}' -X POST

您将收到类似以下内容的信息:

{
   "app":{
      "name":"GitHub API",
      "url":"http://developer.github.com/v3/oauth/#oauth-authorizations-api"
   },
   "token":"b2067d190ab94698a592878075d59bb13e4f5e96",
   "scopes":[
      "repo"
   ],
   "created_at":"2012-07-12T12:55:26Z",
   "updated_at":"2012-07-12T12:55:26Z",
   "note_url":null,
   "note":null,
   "id":498182,
   "url":"https://api.github.com/authorizations/498182"
}

现在我们可以在后续请求中使用此令牌通过 API 操作我们的 github 帐户。因此,让我们查询我们的存储库并找到我们之前在 Web 界面中设置的 Webhook:

# curl  https://api.github.com/repos/mancdaz/mygithubrepo/hooks?access_token=b2067d190ab94698592878075d59bb13e4f5e96
[
  {
    "created_at": "2012-07-12T11:18:16Z",
    "updated_at": "2012-07-12T11:18:16Z",
    "events": [
      "push"
    ],
    "last_response": {
      "status": "unused",
      "message": null,
      "code": null
    },
    "name": "web",
    "config": {
      "insecure_ssl": "1",
      "content_type": "form",
      "url": "http://jenkins-server.chloky.com/post-hook"
    },
    "id": 341673,
    "active": true,
    "url": "https://api.github.com/repos/mancdaz/mygithubrepo/hooks/341673"
  }
]

请注意 json 输出中的重要部分:

"events": [
      "push"
    ]

这基本上是说,只有在对存储库进行提交(推送)时才会触发此 Webhook。 github API 文档描述了许多可以添加到此列表中的不同事件类型 - 出于我们的目的,我们想要添加 pull_request,这就是我们的做法(请注意,我们从上面的 json 输出中获取 webhook 的 id。如果您定义了多个钩子,您的输出将包含所有这些钩子,因此请确保获得正确的 ID):

# curl  https://api.github.com/repos/mancdaz/mygithubrepo/hooks/341673?access_token=b2067d190ab94698592878075d59bb13e4f5e96 -X PATCH --data '{"events": ["push", "pull_request"]}'
{
  "created_at": "2012-07-12T11:18:16Z",
  "updated_at": "2012-07-12T16:03:21Z",
  "last_response": {
    "status": "unused",
    "message": null,
    "code": null
  },
  "events": [
    "push",
    "pull_request"
  ],
  "name": "web",
  "config": {
    "insecure_ssl": "1",
    "content_type": "form",
    "url": "http://jenkins-server.chloky.com/post-hook"
  },
  "id": 341673,
  "active": true,
  "url": "https://api.github.com/repos/mancdaz/mygithubrepo/hooks/341673"
}

See!

"events": [
    "push",
    "pull_request"
  ],

现在,每当针对我们的存储库发出提交或拉取请求时,都会触发此 Webhook。您在 jenkins/ 中使用此 Webhook 执行的具体操作取决于您。我们使用它在 jenkins 中启动一系列集成测试来测试建议的补丁,然后自动合并并关闭(再次使用 API)拉取请求。相当甜蜜。

帖子 #2 - 2012 年 9 月

在之前的一篇文章中,我讨论了配置 github webhook 以触发拉取请求,而不仅仅是提交。如前所述,github 存储库上会发生许多事件,并且根据 github 文档,其中很多事件可用于触发 webhook。

无论您决定触发什么事件,当 webhook 从 github 触发时,它本质上都会向 webhook 中配置的 URL 发出 POST,包括正文中的 json 负载。 json 负载包含有关导致 webhook 触发的事件的各种详细信息。可以在此处查看在简单提交上触发的示例有效负载:

payload
{
   "after":"c04a2b2af96a5331bbee0f11fe12965902f5f571",
   "before":"78d414a69db29cdd790659924eb9b27baac67f60",
   "commits":[
      {
         "added":[
            "afile"
         ],
         "author":{
            "email":"[email protected] /cdn-cgi/l/email-protection",
            "name":"Darren Birkett",
            "username":"mancdaz"
         },
         "committer":{
            "email":"[email protected] /cdn-cgi/l/email-protection",
            "name":"Darren Birkett",
            "username":"mancdaz"
         },
         "distinct":true,
         "id":"c04a2b2af96a5331bbee0f11fe12965902f5f571",
         "message":"adding afile",
         "modified":[

         ],
         "removed":[

         ],
         "timestamp":"2012-09-03T02:35:59-07:00",
         "url":"https://github.com/mancdaz/mygithubrepo/commit/c04a2b2af96a5331bbee0f11fe12965902f5f571"
      }
   ],
   "compare":"https://github.com/mancdaz/mygithubrepo/compare/78d414a69db2...c04a2b2af96a",
   "created":false,
   "deleted":false,
   "forced":false,
   "head_commit":{
      "added":[
         "afile"
      ],
      "author":{
         "email":"[email protected] /cdn-cgi/l/email-protection",
         "name":"Darren Birkett",
         "username":"mancdaz"
      },
      "committer":{
         "email":"[email protected] /cdn-cgi/l/email-protection",
         "name":"Darren Birkett",
         "username":"mancdaz"
      },
      "distinct":true,
      "id":"c04a2b2af96a5331bbee0f11fe12965902f5f571",
      "message":"adding afile",
      "modified":[

      ],
      "removed":[

      ],
      "timestamp":"2012-09-03T02:35:59-07:00",
      "url":"https://github.com/mancdaz/mygithubrepo/commit/c04a2b2af96a5331bbee0f11fe12965902f5f571"
   },
   "pusher":{
      "email":"[email protected] /cdn-cgi/l/email-protection",
      "name":"mancdaz"
   },
   "ref":"refs/heads/master",
   "repository":{
      "created_at":"2012-07-12T04:17:51-07:00",
      "description":"",
      "fork":false,
      "forks":1,
      "has_downloads":true,
      "has_issues":true,
      "has_wiki":true,
      "name":"mygithubrepo",
      "open_issues":0,
      "owner":{
         "email":"[email protected] /cdn-cgi/l/email-protection",
         "name":"mancdaz"
      },
      "private":false,
      "pushed_at":"2012-09-03T02:36:06-07:00",
      "size":124,
      "stargazers":1,
      "url":"https://github.com/mancdaz/mygithubrepo",
      "watchers":1
   }
}

整个有效负载作为单个参数在 POST 请求中传递,并带有富有想象力的标题payload。它包含大量有关刚刚发生的事件的信息,当我们在触发器之后构建作业时,jenkins 可以使用所有或任何这些信息。为了在 Jenkins 中使用这个有效负载,我们有几个选择。我在下面讨论一个。

获取 $payload

在 jenkins 中,当创建新的构建作业时,我们可以选择指定希望在触发构建的 POST 中传递给作业的参数名称。在这种情况下,我们将传递一个参数payload,如下所示:

将参数传递给 jenkins 构建作业

在作业配置中,我们可以指定我们希望能够远程触发构建(即我们希望允许 github 通过使用有效负载发布到我们的 URL 来触发构建):

然后,当我们在 github 存储库中设置 webhook 时(如第一篇文章中所述),我们为其提供 jenkins 告诉我们的 URL:

您无法在屏幕截图中看到所有内容,但我为 webhook 指定的 URL 是 jenkins 告诉我的 URL:

http://jenkins-server.chloky.com:8080/job/mytestbuild//buildWithParameters?token=asecuretoken现在,当我在 jenkins 中构建新作业时,为了进行此测试,我只是告诉它回显“有效负载”参数的内容(该参数在参数化构建中作为同名的 shell 变量提供),使用一个简单的脚本:

#!/bin/bash

echo "the build worked! The payload is $payload"

现在要测试整个事情,我们只需提交到我们的存储库,然后跳到 jenkins 查看触发的作业:

mancdaz@chloky$ (git::master)$ touch myfile

mancdaz@chloky$ (git::master) git add myfile

mancdaz@chloky$ (git::master) git commit -m 'added my file'
[master 4810490] added my file
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 myfile

mancdaz@chloky$ (git::master) git push
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 232 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To [email protected] /cdn-cgi/l/email-protection:mancdaz/mygithubrepo.git
 c7ecafa..4810490 master -> master

在我们的 jenkins 服务器中,我们可以查看触发的作业的控制台输出,你瞧,$payload 变量中包含我们的“有效负载”,可供我们使用:

太棒了,关于我们 github 活动的所有信息都在这里。并且完全可以在我们的詹金斯工作中使用!确实,它在一个大的 json blob 中,但是通过一些巧妙的 bash,你应该可以开始了。

当然,这个例子使用了一个简单的提交来演示在jenkins内部获取payload的原理。正如我们在之前的文章中讨论的那样,提交是存储库上可以触发 Webhook 的众多事件之一。一旦触发,你在 jenkins 中做什么取决于你,但是当你开始与 github 交互以根据以下结果对存储库采取进一步操作(发表评论、合并拉取请求、拒绝提交等)时,真正的乐趣就来了由初始事件触发的构建作业。

请留意后续的帖子,其中我将所有内容结合在一起,并向您展示如何处理、运行测试并最终合并拉取请求(如果成功)——所有这些都在 jenkins 内自动进行。自动化很有趣!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Jenkins 中处理 github webhook 负载? 的相关文章

  • GitHub Web UI 中的“base”和“head”存储库是什么?

    GitHub 的 UI 相当不直观且考虑不周 所以这里有一个问题 什么是 头 回购 什么是 基础 回购 不知道是从哪一个抄来的 基础 和 头部 这两个词的意思是相同的 链表的 头 类似于树的 基 GitHub 有叉树和文件树 Head 和
  • 詹金斯:${BUILD_LOG, maxLines, escapeHtml} 不起作用

    我正在尝试使用 BUILD LOG maxLines escapeHtml 如下所述 如何从 BUILD LOG 变量中获取最后 20 行 https stackoverflow com questions 16089096 how can
  • Jenkins - Xcode 构建工作协同设计失败

    下面是我的构建脚本 不使用 xcodebuild 插件 构建步骤工程 我使用所需的证书和私钥创建了一个单独的钥匙串 它们在钥匙串访问中可见 脚本中的钥匙串命令不会失败 安全列表钥匙串将这些显示为有效的钥匙串 它的表现就像解锁命令并未真正成功
  • 如何使用 mongo-go-driver 有效地将 bson 转换为 json?

    我想将 bson 转换为mongo go 驱动程序 https github com mongodb mongo go driver有效地转换为 json 我应该小心处理NaN 因为json Marshal失败如果NaN存在于数据中 例如
  • 返回没有属性名称的 Json 结果

    很可能是一个相当微不足道的问题 但我就是找不到合适的答案 我想返回一个 JsonResult 但实际结果没有任何属性名称 这是我想要实现的一个小例子 xbox Xbox 360 Xbox cheats Xbox 360 games The
  • 从 json 创建下拉列表

    我有一个这种形式的 json COLUMNS ID Name DATA 1 Joe 2 Sam 3 Doug 我正在寻找一个如何在 javascript 中从该数据创建下拉列表的示例 但 json dropdown 列表的所有示例 json
  • 如何告诉杰克逊在反序列化期间忽略空对象?

    在反序列化过程中 据我理解是将JSON数据转换为Java对象的过程 我如何告诉Jackson 当它读取不包含数据的对象时 应该忽略它 我正在使用 Jackson 2 6 6 和 Spring 4 2 6 我的控制器收到的JSON数据如下 i
  • 在 d3v4 堆积条形图中使用 JSON

    我找到了一个d3v3堆积条形图示例 http bl ocks org mstanaland 6100713我想使用它 因为它使用 json 数据 还有一个d3v4规范条形图示例 https bl ocks org mbostock 3886
  • Swift 4 使用随机密钥解码嵌套 JSON [重复]

    这个问题在这里已经有答案了 我是 Swift 4 的新手 正在尝试从 Wikipedia API 解码此 JSON 我正在努力定义一个结构 因为我发现的所有示例 教程都仅嵌套 1 2 层深度 除此之外 当其中一个密钥是随机的时 如何解码数据
  • 等待 JavaScript 中 Json 调用完成

    我正在使用下面的json调用在我的 javascript 方法中 function go123 var cityName var temp getJSON https abc in api city callback args functi
  • PHP json_encode 将多个数组编码为一个对象

    我试图在一个 JSON 对象中返回多个数组 但在语法上遇到一些困难 一款 Android 应用程序从多个表接收更新 我希望在一个响应中返回这些更新 目前 这就是我对各种结果集进行编码的方式 json json encode array ta
  • 是否可以用 json 进行表达式/计算?

    我使用出色的 json server 作为应用程序的后端 它对于访问自定义端点以检索一些数据非常有用 但是如果它允许我进行计算 表达式以便我也可以模仿后端行为 那将会非常有用 以这个数据结构为例 products name football
  • 如何阻止 Jenkins 中的 CI 构建意外发布到发布存储库?

    有时 开发人员会不小心签入 POM 中没有 SNAPSHOT 的版本 这将构建 Maven 项目并将工件发布到发布存储库 我怎样才能避免这种情况呢 我只想发布构建工件以发布存储库 而不是 CI 构建 我考虑了以下问题 但它们都不是一个简单的
  • 嵌套对象的 AJV 模式验证

    函数返回的对象看起来像这样 answer vehicle type 1 message Car model VW color red 答案 对象始终存在 其他字段基于 vehicle type E g 如果vehicle type 1 则有
  • 如何将图像文件添加到 json 对象中?

    我想将图像文件添加到 json 对象中 是否可以将图像文件添加到 json 对象中 我尝试了下面的代码 但它不起作用 因为我想将该 json 对象发送到服务器 然后服务器将读取我的图像文件并存储到该数据库中 JSONObject test
  • 当前本地调试 Travis 构建的工作流程是什么?

    One 曾经能够 https stackoverflow com questions 16677232 where can i download the 64 bit travis ci vm images to 下载流浪盒 http re
  • 通过 MQTT 将 LoRa 测量结果发送到 Fiware IOT 代理

    我有 LoRa 传感器 它使用 Cayenne LPP 格式有效负载发送测量值 我的网关 LOrank8v1 捕获这些数据包并将其转换为 UDP 网关中有一个服务 lora gateway bridge 它将数据包从 UDP 转换为 TCP
  • 如何使用 fs.copyTpl 忽略 Yeoman 中的文件

    我怎样才能忽略文件 我想排除任何子目录中以 开头的所有文件 我使用这两种方法没有成功 this fs copyTpl this templatePath basicFiles this destinationPath answers ign
  • 如何使用 json.net 在生成的 json 中“内联”属性

    我的一个类中有一个属性 我试图用 json net 序列化它 我想 内联 这意味着 我不想将该属性嵌套到具有属性名称的元素中 但其内容直接位于其父级中 这是一个例子 假设我有以下类结构 public interface ISteeringW
  • 使用 Ruby 验证 Jenkins 插件表单

    我正在用 Ruby 开发一个 Jenkins 插件 您应该能够配置连接到服务器的每个节点 以便在该节点失去与主服务器的连接时将电子邮件发送到指定的地址 EmailNodeProperty添加一个字段来输入电子邮件地址 Save an ema

随机推荐

  • 使用 Malloc 在 C 中定义结构

    我问了一个早些时候提问 https stackoverflow com questions 2177391 allocating memory for a structure in c关于使用 malloc 定义结构 这是大多数人给我的答案
  • 如何在 ASP.NET MVC 项目中指定默认应用程序池?

    在我的 ASP NET MVC 项目中 我添加了一个parameters xml 文件 如下所示
  • momentjs 中两个时间之间的小时差(HH:MM:SS a)

    我有两次没有约会 var startTime 12 16 59 am var endTime 06 12 07 pm 我想通过使用来显示上述时间之间的总小时数moment js 如果不可能在moment js那么请让我知道使用javascr
  • DataGridViewCell 在更改焦点之前不会更新

    我的 DataGridView 有这个事件 当按下删除键时 它应该将 CurrentCell Value 变为 null 实际上 它确实有效 但在我更改选定 聚焦的单元格之前 该值不会改变 如何修改才能立即更新 这是我的代码 private
  • 无法在 C# 中运行禁用邮箱 Powershell

    我正在尝试用 C 重现 Powershell 的以下工作块 我们正在连接 Exchange2010 实例 ExURI http ExchangeUrl PowerShell Session New PSSession Configurati
  • 更改 onclick 事件,JavaScript 不起作用

    我有这个 function tp visible action if action 1 document getElementById tp style display block document getElementById tp ac
  • 按点击付费断点

    如何在 PPC 上 具体来说 在 OS X 上 实现断点 例如 在 x86 上 通常使用 INT 3 指令 0xCC 完成 对于 ppc 是否有与此类似的指令 或者还有其他设置 实施的方式吗 使用 gdb 和一个十六进制转储自身的函数 我得
  • 返回 Activity 而不重新创建(不调用 onCreate())

    我想问类似的问题 返回上一屏幕而不创建新实例 https stackoverflow com questions 11715848 go back to previous screen without creating new instan
  • 如何在 Rails 的 ERB 模板中使用 `<%=` 来修剪最后出现在 `pre` 元素中的前导空白?

    据我在这里研究 这不是一个重复的问题 修剪空格 通常是尾随换行符 正在讨论 但不适合 结果是 HTML 输出为 p strong Code strong p pre class highlight github span class kt
  • 使用 GAS 获取相当于持续时间的数字

    我有一个具有持续时间类型值的单元格 我已将值设置为 00 10 00 即 10 分钟 当我将单元格的格式更改为数字时 它将显示 0 01 如何以编程方式使用应用程序脚本获得与使用应用程序脚本代码相同的十进制等效值 00 10 00 是 0
  • HQL:按可空属性的属性排序

    假设有两个表 A a id b id and B b id c 我需要执行表单的 HQL 查询 From A a ORDER BY a b c while b在类中可以为空A 但是 该查询仅返回以下实例A其中有非空b财产 发生这种情况是因为
  • GC过多时如何更快OOM? [复制]

    这个问题在这里已经有答案了 有时 我的 JVM 会耗尽内存 但我可以从中恢复 或 heapDumpOnOOM 和调试 的 OOMing 它往往会在 GC 中颠簸数小时 然后抛出内存不足 这本质上与 未回答的 问题相同 如何配置 Java G
  • 计算 Laravel 中的坐标距离

    我的模型中有一个创建别名的范围 我需要在其上执行一个 where 我知道 MySql 不允许这样做 标准 SQL 不允许您在 WHERE 中引用列别名 条款 施加此限制是因为当 WHERE 代码为 执行后 列值可能尚未确定 但是 我想知道
  • 创建数组并在一行中将其推入其中

    以下只是一个理论上的 JavaScript 问题 我很好奇以下内容是否可以转换为单个语句 if window foo window foo window foo push bar 这段代码大家可能都写过 但是一行能完成吗 起初我以为这样的事
  • uml 与 RDF 和 OWL 的组合关系

    我是 RDF 和 OWL 本体的初学者 我正在尝试将此图转换为 OWL 语法
  • 带有 Angular 2 和 webpack 2 的单个单独的 CSS 文件?

    我有一个使用 Angular 2 和 Webpack 2 的简单应用程序 使用 sass 作为模板和 angular2 template loader 这样我就可以使用templateUrl and styleUrls而不是使用requir
  • 更改监听输入源

    我想用 AutoHotkey 更改我的显示器输入源 并且我已经部分工作了 但是 当我使用热键将显示器输入源从 pc DVI 更改为我的 xbox YPbYr 时 显示器未检测到 xbox 已打开 它显示没有源 显示器 gt 华硕 VG236
  • 适用于移动应用程序的最佳远程技术是什么?

    我有一个 java 后端 需要向在以下环境中运行的客户端公开服务 J2ME 视窗手机 iPhone 我正在寻找适合每个平台的最佳工具 我不会寻找一种在任何地方都适用的技术 我需要一些适合低速互联网访问的 轻型 东西 现在我正在使用 SOAP
  • 列出所有可用的 .NET 程序集

    列出所有可用的 NET 2 0 程序集的最佳方法是什么 所需列表的一个示例是当您在 NET 选项卡中执行 添加引用 时 MS Visual Studio 显示的列表 我读过 Visual studio 使用它自己的目录配置 GAC 和 NE
  • 如何在 Jenkins 中处理 github webhook 负载?

    我目前正在通过 GitHub Webhook 触发我的 Jenkins 构建 我将如何解析 JSON 有效负载 如果我尝试参数化我的构建并使用 payload 变量 GitHub webhook 将失败并出现以下错误 h2 HTTP ERR