如何在没有令牌的情况下登录 Azure DevOps Artifact 提要

How to log into Azure DevOps Artifact feed without token

我有一个我们设置的 Azure DevOps 工件源。在与工件相同的项目中,我创建了一个 gradle 构建并使用令牌作为密码,我可以访问工件提要以使其访问工件。我部门的某个人认为可能有一种无需令牌即可访问工件存储库的方法。我尝试使用 System.AccessToken 但它没有用。也许有不同的方式来设置神器?

这是我的 gradle.build 文件:

    credentials { 
        username "Testuser" 
        DevOps Services_ENV_ACCESS_TOKEN") : vstsMavenAccessToken 
        //password "<using raw token works>"
        //password System.getenv("SYSTEM_ACCESSTOKEN")
        password System.getenv("TOKEN")
    } 

这是我的 azure-pipelines.yml,我在其中定义了我在 build.gradle 文件中使用的变量。 token 是一个环境变量,我已将其设置为我的实际令牌(有效)。如果我交换它并使用 System.AccessToken 它不起作用:

steps:
- task: Gradle@2
  inputs:
    workingDirectory: ''
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    testResultsFiles: '**/TEST-*.xml'
    tasks: 'build'
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)
    TOKEN: $(token)

保持健康,感谢您的帮助或见解!

How to log into Azure DevOps Artifact feed without token

正如您所尝试的那样,使用 $(System.AccessToken) 应该可以正常工作。简单分享一下我的步骤和一些需要注意的要点。

配置:

这是我的 build.gradle 文件的一部分,我应用 $(System.AccessToken) 将程序包发布到我的提要:

publishing {
    publications {
        myPublication(MavenPublication) {
            groupId 'com.microsoft.core'
            artifactId 'mock='
            version "${version}"
            artifact "build/libs/mock-${version}.jar"
        }
    }
    // Repositories *to* which Gradle can publish artifacts
    repositories {
        maven {
            url 'https://pkgs.dev.azure.com/{org name}/_packaging/{project name}/{feed name}/v1'
            credentials {
               username "Azure DevOps Services"  
               //password System.getenv("AZURE_ARTIFACTS_ENV_ACCESS_TOKEN") != null ? System.getenv("AZURE_ARTIFACTS_ENV_ACCESS_TOKEN") : vstsMavenAccessToken
               password System.getenv("SYSTEM_ACCESSTOKEN")
            }
        }
    }
}

YAML部分定义:

- task: Gradle@2
  displayName: Gradle Publish
  inputs:
    workingDirectory: ''
    gradleWrapperFile: 'gradlew'
    gradleOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.8'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    tasks: 'publish'
  condition: always()
  env:
    SYSTEM_ACCESSTOKEN: $(System.AccessToken)

您可以看到我的发布日志,发布成功:


除了上面的脚本配置外,您还可以对Feed 设置进行配置。因为管道实际使用 Collection/project 服务帐户来访问和执行提要中的操作。

请进入 Feed 设置,搜索并将 Project Collection Build Service ({org name}){Porject name} Build Service ({org name}) 添加到此权限设置中。并为他们分配 Owner 角色。

现在,重新构建您的管道,您将看到它可以成功访问提要。