sap-cloud-sdk - 如何在 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 登录。
解决方案
我认为您可以考虑以下选项:
允许对工件进行匿名读取访问 无论如何,开发人员都需要一种在本地构建工件的方法。开发人员如何在无法访问依赖项的情况下构建您的服务。允许读取访问权限也将使他们能够做到这一点。
将凭据提交给 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>
推荐阅读
- batch-file - 为什么 `set test=%test:*=.*%` 不起作用,说 `=.*% is unexpected at this time`?
- java - 是什么导致这段代码抛出异常?
- node.js - npm start 在 CRA 中无法“正常工作”
- node.js - 同步遍历 Firestore 集合
- node.js - NPM 消耗所有可用内存
- string - 使用 PDA,证明 ( x * y ) + x 是一个有效的字符串
- react-native - 除了使用 React Native 登录时,如何在任何屏幕上显示抽屉(SideMenu)?
- xamarin - 如何从 MSAL 身份验证中注销。?
- laravel - 在控制器 laravel 中保存数组
- git - 如何查找谁在特定文件上贡献了最多的代码行