在 Azure Pipelines 任务中,我尝试创建并推送新分支。我可以使用$(System.AccessToken)变量克隆存储库,当我尝试推送新分支时,出现以下错误:
remote: TF401027: You need the Git 'GenericContribute' permission to perform this action. Details: identity 'Build\(GUID)', scope 'repository'.
Run Code Online (Sandbox Code Playgroud)
如果我检查我的存储库安全性,我会看到构建服务用户和项目集合构建服务帐户组都将“贡献”、“创建分支”、“贡献拉取请求”和“创建标签”权限设置为“允许”,这是我所有研究的结果我所做的就是我应该做的。
我该如何解决这个问题?我认为要么我错过了一些愚蠢的东西,要么存在权限继承问题。但是,如果我在存储库本身上设置安全性,我的假设是应该覆盖任何继承的权限。
管道:
steps:
- powershell: |
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" clone "https://repoaddress/_git/common"
cd common
git checkout develop
git checkout -b release/$(build.buildNumber) $(build.buildNumber)
git -c http.extraheader="AUTHORIZATION: bearer $(System.AccessToken)" push -u origin HEAD
displayName: 'Create Branch From Tag'
Run Code Online (Sandbox Code Playgroud)
我正在尝试在 Azure DevOps 中构建 YAML 发布管道,为此我创建了多个分支来保存特定于环境的文件
我还创建了 4 个发布管道:
问题:每当我在任何分支中进行任何更改时,所有分支管道都会开始运行。如果我运行单独的管道,它工作得很好。
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger:
- acc
pool:
name: 'Agent'
steps:
- task: Kubernetes@1
displayName: 'Deploy on K8s Cluster'
inputs:
connectionType: 'Azure Resource Manager'
azureSubscriptionEndpoint: 'vs-aks-sc'
azureResourceGroup: 'azwe-rg-01'
kubernetesCluster: 'azwe-aks-01'
command: 'apply'
arguments: '-f $(System.DefaultWorkingDirectory)/kubernetes/acc.yaml'
Run Code Online (Sandbox Code Playgroud)
azure-devops azure-pipelines multibranch-pipeline azure-devops-pipelines
在 Azure DevOps 中,我有一个管道,其中需要特定任务的日志。如何找出需要哪个日志 ID 来获取它?
例如。在用户界面上,这是端点:https://dev.azure.com/myorg/myspace/_build/results ?buildId=1234&view=logs&j=899c4bff-9ac3-12de-4775-50e701812cb4&t=bc949ec8-c945-5220-1d40-d8ea7dab4bda 其中包含作业和任务 ID,但这些在查询日志时毫无用处。
同样的示例,我需要的日志的网址:https://dev.azure.com/myorg/cd642969-da00-4584-ab6a-4b6021c47eff/_apis/build/builds/1234/logs/24
任务的数量取决于我设置的参数,因此数字 24 会发生变化。如果我知道作业和任务的名称/ID,如何计算日志ID?
我应该检查所有约 100 个任务日志并 grep 查找任务名称第一行中的匹配项吗?(巨魔)
我们有一个每晚计划的管道来运行测试并将结果发布到测试运行。我们可以看到测试运行的 url,因为它是由 PublishTestResults@2 任务生成的。我想通过向一组用户发送测试运行的 devops 链接来扩展此功能。
以下是发布任务当前的样子:
steps:
# Publish test results (to show the test details in JUnit format)
- task: PublishTestResults@2
displayName: 'Publish test results'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '*.xml'
searchFolder: '$(Build.SourcesDirectory)/cypress/reports/junit'
mergeTestResults: true
testRunTitle: 'Publish Test Results'
condition: succeededOrFailed()
continueOnError: true
Run Code Online (Sandbox Code Playgroud)
有没有推荐的方法来做到这一点?
我试图将文件中的PublishTestResults@2任务的failTaskOnFailedTests参数分配azure-pipelines.yml为表达式的结果。第一次运行测试时,如果有任何失败的测试,我想让作业失败。在随后尝试重试失败的作业时,我不想让作业失败。
我已经像这样设置了任务(倒数第二行是我设置参数的地方failTaskOnFailedTests):
- task: PublishTestResults@2
displayName: 'Publish Test Results'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '*.xml'
searchFolder: '$(testsOutputPath)'
mergeTestResults: true
failTaskOnFailedTests: eq($(System.JobAttempt), 1)
testRunTitle: 'Test Results $(System.JobAttempt)'
Run Code Online (Sandbox Code Playgroud)
当我在启用系统诊断的情况下运行管道时,我可以在日志中看到以下内容:
##[debug]testRunTitle=Test Results 1
##[debug]publishRunAttachments=true
##[debug]failTaskOnFailedTests=eq(1, 1)
##[debug]searchFolder=/home/vsts/work/1/s/TestProject/cypress/reports/junit
##[debug]testRunner: JUnit
##[debug]testResultsFiles: *.xml
##[debug]mergeResults: true
Run Code Online (Sandbox Code Playgroud)
第三行显示failTaskOnFailedTests被设置为表达式语句,而不是表达式的计算值。我对自己做错的事情感到不知所措。该表达式似乎与表达式文档中的其他表达式一致。
我缺少什么?
我试图让 Azure DevOps 管道在手动启动管道(使用新的 YAML 语法定义)时提示输入版本号。
即使我在模板中定义变量,启动屏幕也会显示“此管道没有定义的变量”。如何定义变量以便它们显示在管道启动中?
当前的 YAML 定义包含:
variables:
- name: versionName
value: ''
Run Code Online (Sandbox Code Playgroud)
启动管道时不会显示这些:
我们最近重新配置了我们的构建过程以完全在容器中运行,我们现在希望从本地构建代理迁移到在 Azure 规模集中使用代理。
我们希望避免为 Azure 规模集维护自己的 VM 映像,并选择使用 Azure 中提供的默认 Ubuntu 18.04 LTS 映像。
此映像不包含 Docker,因此我们已将 Azure 规模集配置为使用 cloud-config 脚本,该脚本将在 VM 首次启动时安装 Docker:
#cloud-config
apt:
sources:
docker.list:
source: deb [arch=amd64] https://download.docker.com/linux/ubuntu $RELEASE stable
keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88
packages:
- docker-ce
- docker-ce-cli
groups:
- docker
Run Code Online (Sandbox Code Playgroud)
这似乎运行良好,但有时构建作业会失败:
Starting: Initialize containers
/usr/bin/docker version --format '{{.Server.APIVersion}}'
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
'
##[error]Exit code 1 returned from process: file name '/usr/bin/docker', arguments 'version --format '{{.Server.APIVersion}}''.
Finishing: Initialize …Run Code Online (Sandbox Code Playgroud) 我在运行 Azure DevOps Pipeline 时遇到问题。
我现在正在使用 Spring Boot Maven 项目。我想在不构建测试(src/test)文件的情况下运行构建管道,因为项目使用测试文件会构建失败,而没有测试文件则可以成功构建。
有什么设置或配置吗?非常感谢。
您可以查看图片以了解详细信息,谢谢。 请检查日志图像
maven spring-boot azure-devops spring-boot-test azure-devops-pipelines
我尝试在项目中设置传入的 Webhook 以触发 yaml 管道。设置与传入 Webhook 的服务连接。将 yaml 片段添加到管道中,如下所示:
resources:
webhooks:
- webhook: testtrigger ### Webhook alias
connection: testconnection ### Incoming webhook service connection
Run Code Online (Sandbox Code Playgroud)
当通过curl:调用url时curl -X POST 'https://dev.azure.com/<my org>/_apis/public/distributedtask/webhooks/testtrigger?api-version=6.0-preview' -d '{ "tags": {} }' -H "Content-Type: application/json",我总是收到错误消息:
{"$id":"1","innerException":null,"message":"Cannot find webhook for the given webHookId testtrigger. Try enabling CD trigger for this artifact.","typeName":"Microsoft.TeamFoundation.DistributedTask.Pipelines.Artifacts.WebHooks.WebHookException, Microsoft.TeamFoundation.DistributedTask.Orchestration.Server","typeKey":"WebHookException","errorCode":0,"eventId":3000}
Run Code Online (Sandbox Code Playgroud)
尝试在触发器/连接上使用不同的名称,但没有任何效果。我缺少什么想法吗?
我有有线行为\n当任务中未设置failOnStderr: true 时一切正常,但是
\n当我使用failOnStderr: true 调用这样的脚本任务时:
- script: |\n echo \'Start invoking Fastfile\'\n fastlane release --verbose projectName:${{parameters.projectName}} appIdentifier:${{parameters.appIdentifier}} versionNumber:${{parameters.versionNumber}} buildNumber:${{parameters.buildNumber}} plistFileFtpBasePath:${{parameters.plistFileFtpBasePath}} ArtifactsDirectory:$(System.ArtifactsDirectory)\n echo \'Done invoking Fastfile\'\n failOnStderr: true \n workingDirectory: \'$(System.ArtifactsDirectory)/ios_artifacts\'\n displayName: \'create keychain invoke fastlane\'\nRun Code Online (Sandbox Code Playgroud)\n我收到此错误:
\n2020-09-30T07:54:45.8179430Z INFO [2020-09-30 07:54:45.81]: [32mfastlane.tools finished successfully \xc3\xb0\xc5\xb8\xc5\xbd\xe2\x80\xb0[0m\n2020-09-30T07:54:45.8917310Z Done invoking Fastfile\n2020-09-30T07:54:45.8948720Z \n2020-09-30T07:54:45.9020160Z ##[error]Bash wrote one or more lines to the standard error stream.\n2020-09-30T07:54:45.9033610Z ##[error]/Users/runner/hostedtoolcache/Ruby/2.7.1/x64/lib/ruby/gems/2.7.0/gems/fastlane-2.161.0/fastlane_core/lib/fastlane_core/ui/interface.rb:141: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to …Run Code Online (Sandbox Code Playgroud) 我在 Azure Devops 上有一个管道,我正在尝试使用 REST api 以编程方式/无头方式运行:https ://docs.microsoft.com/en-us/rest/api/azure/devops/pipelines/runs/run% 20pipeline?view=azure-devops-rest-6.0
到目前为止一切顺利,我可以进行身份验证并开始运行。我想将数据传递到这个管道,文档建议可以variables在请求正文中使用。我的请求正文:
{
"variables": {
"HELLO_WORLD": {
"isSecret": false,
"value": "HelloWorldValue"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的管道 YAML 如下所示:
trigger: none
pr: none
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
KEY=$(HELLO_WORLD)
echo "Hello world key: " $KEY
Run Code Online (Sandbox Code Playgroud)
然而,这给了我一个错误“HELLO_WORLD:找不到命令”。
我尝试向管道添加“HELLO_WORLD”变量并启用“让用户在运行此管道时覆盖此值”设置。这导致HELLO_WORLD变量不再是未知的,而是它停留在其初始值上,并且在我使用 REST api 触发运行时未设置
如何使用 REST api 将变量传递给管道?仅为特定的运行/构建设置变量值很重要
我找到了另一个 API 来运行构建,但似乎您不能使用个人访问令牌身份验证,就像您可以使用管道 api - 仅 OAuth2 - https://docs.microsoft.com/en-us/rest/ api/azure/devops/build/builds/queue?view=azure-devops-rest-6.0
azure-devops azure-devops-extensions azure-devops-rest-api azure-devops-pipelines
希望有人能帮我解决这个问题,回顾一下我的 git 日志,我现在已经尝试了 14 种不同的方法来尝试让它发挥作用。这是场景:
我在 UI 中创建了一个名为deploy_custom_env“用户可以在运行时设置变量”的变量。我将其初始化为“默认”,但我希望用户在开始手动运行时覆盖它。
我试图在condition我的一些管道阶段中使用这个变量。
我尝试过很多很多不同的事情。这里有些例子:
第一的:
condition: ne(variables.deploy_custom_env, 'default')
Run Code Online (Sandbox Code Playgroud)
和
condition: ne('${{ variables.deploy_custom_env }}', 'default')
Run Code Online (Sandbox Code Playgroud)
和
variables:
- name: isCustomEnv
value: ne[($(deploy_custom_env), 'default')]
Run Code Online (Sandbox Code Playgroud)
乃至
variables:
- name: isCustomEnv
value: ne[(variables.deploy_custom_env, 'default')]
Run Code Online (Sandbox Code Playgroud)
有趣的是,当尝试使用上述内容时,以下两种情况都会导致跳过阶段:
condition: eq(variables.isCustomEnv, true)
condition: eq(variables.isCustomEnv, false)
Run Code Online (Sandbox Code Playgroud)
这是否意味着它既是 又是true和false?(当然,我在开玩笑:我不知道这实际上会评估什么。)我也尝试过启用System.debug和检查“启用系统诊断”,但是当我的阶段被跳过时,我真的看不出这些是什么变量正在评估。
我将不胜感激任何可以帮助我解决这个问题的建议或文档。这肯定是人们做的事情吗?另外,建议任何来自 Azure 的人阅读:我很乐意在文档中的某个地方看到这个示例。
我查看了以下内容来尝试回答这个问题:
在后者中,我看到了编译时和运行时之间的区别,并附有以下注释:
运行时和编译时表达式语法之间的区别主要在于可用的上下文。在编译时表达式 (${{ }}) 中,您可以访问参数和静态定义的变量。在运行时表达式 ($[ ]) 中,您可以访问更多变量,但不能访问参数。
这似乎是相关的,但我如何将其转化为在我的condition系统中有效的东西?