经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » Git » 查看文章
Jenkinsfile 同时检出多个 Git 仓库
来源:cnblogs  作者:徐风吟  时间:2022/11/17 9:13:04  对本文有异议

前置

通常,在 Jenkinsfile 中使用 Git 仓库是这样的:

  1. stage('Checkout git repo') {
  2. steps {
  3. checkout([
  4. $class: 'GitSCM',
  5. branches: [[name: 'develop']],
  6. userRemoteConfigs: [[
  7. credentialsId: 'ssh-private-key-id',
  8. url: 'project-git-repo-url'
  9. ]]
  10. ])
  11. }
  12. }

以上写法的结果是远程 Git 仓库中所有内容都被检出到当前工作目录下,因此我们才能像下面这样(不用切换目录而)直接运行一些命令:

  1. stage('generate version number') {
  2. steps {
  3. VERSION_NUBMER = sh(script: "git describe --always", returnStdout: true).trim()
  4. }
  5. }

将 Git 仓库检出到指定文件夹

如果要同时拉取多个 Git 仓库,面临的首要问题是如何将 Git 仓库检出到指定文件夹。对此,可以通过使用 $class: 'RelativeTargetDirectory' 解决,具体代码如下:

  1. stage('Checkout git repo') {
  2. steps {
  3. checkout([
  4. $class: 'GitSCM',
  5. branches: [[name: 'develop']],
  6. userRemoteConfigs: [[
  7. credentialsId: 'ssh-private-key-id',
  8. url: 'project-git-repo-url'
  9. ]],
  10. extensions: [[
  11. $class: 'RelativeTargetDirectory',
  12. relativeTargetDir: 'repo-folder'
  13. ]]
  14. ])
  15. }
  16. }

这样一来,远程 Git 仓库中所有内容将被检出到 ./repo-folder 文件夹下;后续我们若想在 Git 项目目录下操作,就需要先 cd ./repo-folder 了,例如:

  1. stage('generate version number') {
  2. steps {
  3. VERSION_NUBMER = sh(script: "cd ./repo-folder && git describe --always", returnStdout: true).trim()
  4. }
  5. }

检出多 Git 仓库

在解决了将 Git 仓库检出到指定文件夹这一问题后,检出多 Git 仓库这一需求就稍显容易,下面以检出repoA、repoB、repoC三个仓库为例:

  1. stage('Checkout multiple git repos') {
  2. steps {
  3. checkout([
  4. $class: 'GitSCM',
  5. branches: [[name: 'develop']],
  6. userRemoteConfigs: [[
  7. credentialsId: 'ssh-private-key-id',
  8. url: 'project-git-repoA-url'
  9. ]],
  10. extensions: [[
  11. $class: 'RelativeTargetDirectory',
  12. relativeTargetDir: 'repoA-folder'
  13. ]]
  14. ])
  15. checkout([
  16. $class: 'GitSCM',
  17. branches: [[name: 'develop']],
  18. userRemoteConfigs: [[
  19. credentialsId: 'ssh-private-key-id',
  20. url: 'project-git-repoB-url'
  21. ]],
  22. extensions: [[
  23. $class: 'RelativeTargetDirectory',
  24. relativeTargetDir: 'repoB-folder'
  25. ]]
  26. ])
  27. checkout([
  28. $class: 'GitSCM',
  29. branches: [[name: 'develop']],
  30. userRemoteConfigs: [[
  31. credentialsId: 'ssh-private-key-id',
  32. url: 'project-git-repoC-url'
  33. ]],
  34. extensions: [[
  35. $class: 'RelativeTargetDirectory',
  36. relativeTargetDir: 'repoC-folder'
  37. ]]
  38. ])
  39. }
  40. }

上面??代码的结果就是工作目录下有了 repoA-folderrepoB-folderrepoC-folder 三个文件夹。

同时

截止现在,还没有达到我们的最终目的。本文标题叫做“Jenkinsfile 同时检出多个 Git 仓库”,但现在我们仅仅做到了“多个”还没有做到“同时”,为此我们需要使用Jenkins Pipeline语法中的 parallel 关键字。

  1. stage('Checkout multiple git repos at the same time') {
  2. parallel {
  3. stage('repoA') {
  4. steps {
  5. checkout([
  6. $class: 'GitSCM',
  7. branches: [[name: 'develop']],
  8. userRemoteConfigs: [[
  9. credentialsId: 'ssh-private-key-id',
  10. url: 'project-git-repoA-url'
  11. ]],
  12. extensions: [[
  13. $class: 'RelativeTargetDirectory',
  14. relativeTargetDir: 'repoA-folder'
  15. ]]
  16. ])
  17. }
  18. }
  19. stage('repoB') {
  20. steps {
  21. checkout([
  22. $class: 'GitSCM',
  23. branches: [[name: 'develop']],
  24. userRemoteConfigs: [[
  25. credentialsId: 'ssh-private-key-id',
  26. url: 'project-git-repoB-url'
  27. ]],
  28. extensions: [[
  29. $class: 'RelativeTargetDirectory',
  30. relativeTargetDir: 'repoB-folder'
  31. ]]
  32. ])
  33. }
  34. }
  35. stage('repoC') {
  36. steps {
  37. checkout([
  38. $class: 'GitSCM',
  39. branches: [[name: 'develop']],
  40. userRemoteConfigs: [[
  41. credentialsId: 'ssh-private-key-id',
  42. url: 'project-git-repoC-url'
  43. ]],
  44. extensions: [[
  45. $class: 'RelativeTargetDirectory',
  46. relativeTargetDir: 'repoC-folder'
  47. ]]
  48. ])
  49. }
  50. }
  51. }
  52. }

参考


image

原文链接:https://www.cnblogs.com/astrofeyx/p/jenkins-parallel-checkout-multiple-git-repositories.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号