小编hcd*_*ocs的帖子

无法在 Bash 脚本中的 cURL 命令中使用 PAT 访问 Azure DevOps API

我有一个脚本,它使用 Azure DevOps API 来检索查询中的每个工作项。然后它检索每个工作项的元数据。它需要 PAT。直到今天,PAT 仍然有效。我相信它已经过期了。我创建了一个新的 PAT,但每次检索相同信息的尝试都是未经授权的 (401)。

我的脚本中的 cURL 命令到目前为止一直有效:

ado_token={username@company.com:PAT, all Base-64 encoded as one string}

curl -X GET -H "Authorization: Basic $ado_token" -H 'Cache-Control: no-cache' "https://dev.azure.com/{company}/{project}/_apis/wit/wiql/{query ID}?api-version=5.1"
Run Code Online (Sandbox Code Playgroud)

以下是事实:

  • 直接在浏览器中访问该URL即可成功。
  • 新令牌与 URL 位于同一项目中。
  • 新令牌具有完全访问权限。

有关 ADO PAT 的 Microsoft 文档提供了以下示例:

curl -u username[:{personalaccesstoken}] https://dev.azure.com/{organization}/_apis/build-release/builds
Run Code Online (Sandbox Code Playgroud)

但是,当我使用我知道正确的 URL 输入我的用户名和 PAT 时,它是未经授权的。

无论是 Microsoft 示例的格式还是我想在脚本中使用的 URL,这些在Bearer和的所有迭代中都是未经授权的Basic。使用的 URL 在浏览器中有效:

  • {用户名}:{PAT}
  • {用户名}@{公司}.com:{PAT}
  • Base-64 编码 {PAT}
  • Base-64 编码的{用户名}@{公司}.com:{PAT}
  • Base-64 编码 pat:{PAT}
  • Base-64 编码的{用户名}:{PAT}
  • Base-64 编码的{用户名}@{公司}.com:{PAT}

我已经在命令行和邮递员中尝试过,但没有提供任何添加信息。

我错过了一些明显的东西吗?最令人困惑的方面是以前的 PAT …

api bash curl azure azure-devops

9
推荐指数
1
解决办法
1万
查看次数

Azure DevOps 构建中出现“在 .gitmodules 中找不到子模块路径的 url”错误

存储库(“网站”)有一个子模块(“模板”)。该子模块在存储库的目录中被引用。目标是使用 Azure DevOps 管道一起构建存储库和子模块。但是,Azure DevOps 构建会引发以下错误:

  • fatal: No url found for submodule path '<repo directory AKA "website">/<submodule directory AKA "template">' in .gitmodules
  • [error]Git submodule update failed with exit code: 128

根据对.gitmodule文件的调整,还会引发此错误:

  • fatal: no submodule mapping found in .gitmodules for path '<repo directory AKA "website">/<submodule directory AKA "template">'

这个问题与 Stack Overflow 上提出的其他问题类似,但不同之处在于 Azure DevOps 构建中的默认初始步骤是签出分支中的文件。因此脚本(如git rm --cached <pathtomodule>)不能首先运行。

“网站”和“模板”存储库位于同一个 Azure DevOps 项目中。

我尝试了两种方法都没有成功。两者均基于 Microsoft 文档。这是因为我不清楚同一项目的子模块是否可以在不提供显式凭据的情况下包含在存储库中。

  1. 通过用户界面:

    • “清理选项”:“所有构建目录”
    • “签出子模块”:True
    • 分支包含 .gitmodule 文件:True
  2. 通过 PowerShell 任务中的 git 命令: …

git azure azure-pipelines

7
推荐指数
1
解决办法
2万
查看次数

使用 Pandoc 内联 CSS

如果在某处记录了以编程方式(不是通过在浏览器字段中复制/粘贴并单击按钮进行转换)的简单方法,我深表歉意。在我的搜索和阅读中,我找不到它。

我想以编程方式将 Markdown 和 CSS 文件转换为听起来可能被称为“内联”CSS 的内容。例如:

这个 Markdown 文件 ( file.md)

# Install
Install instructions

## Update
Update instructions
Run Code Online (Sandbox Code Playgroud)

这个 CSS 文件 ( style.css)

h1 {
    font-size: 100px;
}

h2 {
    color: red;
}
Run Code Online (Sandbox Code Playgroud)

变成这样(file.html

<h1 style="font-size: 100px;"><a id="install"></a>Install</h1>
<p>Install instructions</p>
<h2 style="color: red;"><a id="update"><a>Update</h2>
<p>Update instructions</p>
Run Code Online (Sandbox Code Playgroud)

我正在使用Pandoc将 Markdown 转换为 HTML

pandoc -f markdown -t html file.md -o file.html
Run Code Online (Sandbox Code Playgroud)

当我使用

pandoc -f markdown -t html file.md -o file.html --css=style.css --self-contained
Run Code Online (Sandbox Code Playgroud)

(或--standalone) …

html css scripting markdown pandoc

5
推荐指数
3
解决办法
3642
查看次数

在 Bash 循环中检测分页 cURL 响应的最后一页

目标

使用 cURL 和 Bash 将分页 REST API 调用中的所有对象包含在单个 JSON 文件中。此组合列表将输入到 Power BI 报告中。

细节

一个请求最多返回 100 个对象。总共有 400 多个对象。总量随着时间的推移而增长。我不想维护包含类似内容的脚本,for set in 0 100 200 300 400 ; do因为它需要我手动将集合与当前的对象数量匹配。为了节省人力,我想要一个脚本来自动检测最终页面何时被处理然后中断。

为了实现我的目标,到目前为止我提出的计划是将每个 100 个项目的增量集提取到自己的 JSON 文件中,然后cat使用 JQ 将它们组合起来并提取相关的 JSON 键/值。使用 Bash 的原因是它是我所知道的唯一编程。

试图

(基于此问答

for ((i=0; ; i+=100)); do
    contents=$(curl -u "username:password" -H "Content-Type: application/json" "https://<url>/api/core/v3/places?count=100&startIndex=$i")
    echo "$contents" > $i.json
    if [[ $contents =~ 'list" : [ ]' ]]
    then break
    fi
done
Run Code Online (Sandbox Code Playgroud)

结果

除第一页和最后一页外,所有页面均按预期导出:

  • 第一个 …

api bash json curl jq

4
推荐指数
1
解决办法
4104
查看次数

如果 &lt;something&gt;,在 Kusto 中什么都不做

用例:在 Azure Application Insights 中,从 Azure Web 应用创建每页的视图表

在 Azure Application Insights 中使用 Kusto,我想合并表 1 中的行:

在此处输入图片说明

进入表2:

在此处输入图片说明

不幸的是,下面的查询将第一列(第一行除外)中的单元格替换为第二列中的单元格。这是基于查询的编写方式所预期的。不幸的是,这是不正确的,而不是我的目标。

在此处输入图片说明

pageViews 
| where timestamp between(datetime("2020-03-01T00:00:00.000Z")..datetime("2020-06-01T00:00:00.000Z"))
| extend guide = case(
    url contains "/guide-1/","guide-1",
    url contains "/guide-2/","guide-2",
    url contains "/guide-3/","guide-3",
    "home-page"
)
| extend tag = case(
    url contains "/guide-1/","install",
    guide contains "home-page","home-page",
    "how-to"
)
| extend name = case(
    name contains "Welcome to docs","Welcome to docs",
    "home-page" //This is incorrect - nothing should happen if the name does not contain "Welcome to …
Run Code Online (Sandbox Code Playgroud)

azure-application-insights kql azure-data-explorer

2
推荐指数
1
解决办法
3064
查看次数

删除 Markdown 中的 HTML 元素

目标

将带有 HTML 的 Markdown 文件转换为纯 Markdown

代码: in.md

# Title

## Subtitle

### Sub-subtitle

<span><div>Line before image</div><div><br></div><div><img src="img.png" width=404 height=255><br></div><div><br></div><div>Line after image</div><div><br></div><div>Text</div></span><h1><span>Heading 1</span></h1><span><div>Text</div><div><br></div></span><h2><span>Heading 2</span></h2><span><div>Text</div></span><h3><span>Heading 3</span></h3><div><span>Text</span></div><div><span><br></span></div><span><div>Line before code</div><code><pre><code><div>Code line 1</div><div>Code line 2</div><div>Code line 3</div></code></pre></code><div><span style="">Line after code</span><br></div><div><span style=""><br></span></div><div><span style=""><a href="http://pandoc.org">Link</a></span></div><div><span style=""><br></span></div><div><ul><li>Unordered bullet 1<br></li><li>Unordered bullet 2<br></li></ul></div><div><span style=""><br></span></div><div><ol><li>Ordered bullet 1<br></li><li>Ordered bullet 2<br></li></ol></div><div><span style=""><br></span></div></span><blockquote style="margin:0 0 0 40px;border:none;padding:0px;"><span><div><span style="">Quote line 1</span></div></span><span><div><span style="">Quote line 2</span></div></span></blockquote><span><div><span style=""><br></span></div><div><span style="">Text</span></div><div><span style=""><br></span></div><div><i>Italic</i></div><div><i><br></i></div><div>Text</div><div></div></span>

Markdown text

More Markdown text
Run Code Online (Sandbox Code Playgroud)

尝试

我尝试了许多 Pandoc 脚本:

尝试 1

pandoc -f markdown -t markdown_strict …

shell markdown pandoc

1
推荐指数
1
解决办法
1264
查看次数

从每个 00:x0 之前 1 秒开始,每 10 分钟运行一次 Azure Function

Azure 函数必须从 00:59:59(小时、分钟、秒)开始无限期地每 10 分钟运行一次。我使用的 cron 计划不成功。

我正在使用基于计时器的 Javascript Azure 函数,例如,

module.exports = async function (context, myTimer) {
    var timeStamp = new Date().toISOString();
Run Code Online (Sandbox Code Playgroud)

我不相信 Azure 函数中有一个设置可以设置开始日期/时间。cron 调度程序似乎是唯一的选择。

根据 Azure Functions 文档:

计划表达式是一个 CRON 表达式,包含 6 个字段:

{second} {minute} {hour} {day} {month} {day of the week}

请注意,您在网上找到的许多 cron 表达式都省略了 {second} 字段,因此,如果您从其中之一复制,则必须针对额外字段进行调整。

文档提供的示例:

每 5 分钟触发一次:0 */5 * * * *

每天上午 9:30 触发:0 30 9 * * *

59 */10 * * * *结果是这些执行时间:

  • 结果:11:40:59 | 期望时间: 11:39:59 …

javascript cron azure-functions

1
推荐指数
1
解决办法
4504
查看次数

当对象内部的值与指定值 (jq) 匹配时删除 JSON 对象

目标是删除 JSON 文件中包含 JQ 脚本中指定的键/值对的整个对象。

例如,所有带有/unwanted-path/in的对象都path将被删除:

输入.json:

[
    {
        "path": "/path-1/",
        "guide": "Guide 1"
    },
    {
        "path": "/path-2/",
        "guide": "Guide 2"
    },
    {
        "path": "/unwanted-path/",
        "guide": "Guide 3"
    }
]
Run Code Online (Sandbox Code Playgroud)

输出.json:

[
    {
        "path": "/path-1/",
        "guide": "Guide 1"
    },
    {
        "path": "/path-2/",
        "guide": "Guide 2"
    }
]
Run Code Online (Sandbox Code Playgroud)

这个 JQ 脚本是我所见过的最接近潜在成功方法的脚本,但当然它的意图不同并且没有实现目标。

jq '.[] | walk(if type == "object" then del(.path) else . end)' original.json > modified.json
Run Code Online (Sandbox Code Playgroud)

有没有办法在那里添加逻辑来指定要配合的键path

关键始终是,但我会过滤path几个值。如果有一种方法可以一次path过滤多个值,那是理想的,但并不重要。path

json delete-operator jq

1
推荐指数
1
解决办法
686
查看次数