首页 > 解决方案 > 如何在 cloud-s4-sdk 管道的 mavenExecute 步骤中限制向所有人公开项目设置文件?

问题描述

我们正在开发使用 SAP Cloud SDK for Java 交付 SAP CloudFoundry 应用程序(spring-boot 微服务)的 s4sdk 管道实施。

我们有多个开发人员在开发多个微服务,但所有这些微服务都有一些共同的依赖关系。我们希望从一个中心位置控制所有常见依赖项的版本。为此,我们创建了一个 Maven BOM(材料清单)依赖项,并将其添加为所有微服务的 pom.xml 中的父级。上述 BOM 位于 Nexus 存储库中,所有 pom.xml(微服务的)都可以使用如下的存储库标签访问父级。

   <repository> 
          <id>my-repo</id> 
          <name>nexus-repo</name> 
          <url>http://some/url</url> 
   </repository> `

上述 nexus 存储库的凭据放置在settings.xml文件中。

我们想在 cloud-s4-sdk 管道中运行上述模型。虽然它工作正常,但问题是我们需要在 settings.xml 文件中公开 nexus repo 访问凭据。

根据https://github.com/SAP/cloud-s4-sdk-pipeline/blob/master/configuration.md#mavenexecute中的文档,maven 构建的 settings.xml 需要相对于项目根目录放置。这对我们来说是一个安全问题,因为项目存储库位于 GitHub 中,因此开发人员可以访问 projectSettingsFile。

我们不希望这些凭据暴露给开发人员。它应该仅限于管理团队。有没有办法我们可以使用 cloud-s4-sdk 管道来实现这一点?

尽管 nexus 为 maven settings.xml 提供了用户令牌,但这在这里不起作用,因为仍然可以使用令牌值进行 GUI 登录。

标签: sap-cloud-sdk

解决方案


我认为您可以考虑以下选项:

允许对工件进行匿名读取访问 无论如何,开发人员都需要一种在本地构建工件的方法。开发人员如何在无法访问依赖项的情况下构建您的服务。允许读取访问权限也将使他们能够做到这一点。

将凭据提交给 git,但将 git 存储库设为私有 如果您不想允许所有员工(我猜只有员工可以访问您的关系),您可以将凭据与 settings.xml 一起提交,但将存储库设为私有分享这些细节。

注入凭据作为环境变量

您可以将凭据作为环境变量注入到您的设置 xml 文件中。另请参阅:如何通过环境变量传递 Maven 设置 设置环境变量,您可以使用 withCredentials 步骤在 Jenkinsfile 中围绕整个管道。详情见:https ://jenkins.io/doc/pipeline/steps/credentials-binding/

String pipelineVersion = "master"

node {
    deleteDir()
    sh "git clone --depth 1 https://github.com/SAP/cloud-s4-sdk-pipeline.git -b ${pipelineVersion} pipelines"
    withCredentials([usernamePassword(credentialsId: 'nexus', usernameVariable: 'NEXUS_USERNAME', passwordVariable: 'NEXUS_PASSWORD')]) {
        load './pipelines/s4sdk-pipeline.groovy'
    }
}

和一个 settings.xml 像:

    <username>${env.NEXUS_USERNAME}</username>
    <password>${env.NEXUS_PASSWORD}</password>

推荐阅读