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

Ern*_*ert 1 azure-devops azure-artifacts

我有一个我们设置的 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")
    } 
Run Code Online (Sandbox Code Playgroud)

这是我的 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)
Run Code Online (Sandbox Code Playgroud)

保持健康,感谢任何帮助或见解!

Mer*_*SFT 7

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

正如您所尝试的那样,使用$(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")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

定义部分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)
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述


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

请进入提要设置,搜索并添加Project Collection Build Service ({org name}){Porject name} Build Service ({org name})进入此权限设置。并为他们分配所有者角色。

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