[请教] 配置 Jenkins 使用的是 pipeline script from scm,如何获取这个仓库里面的 shell 脚本地址

2020-09-03 13:32:27 +08:00
 lesteryou

前提

  1. 公司有很多项目,最近都打算配置 Jenkins 自动化,但是很多人对这不熟悉,我就计划 把这些 Jenkinsfile 统一管理,新建一个 git 仓库,不同的项目不同的路径去创建 Jenkinsfile,公共部分提取出来,方便维护。
  2. Jenkins 里面的 job 配置是 pipeline script from scm,然后选择对应的脚本路径。
  3. 实际运行也没什么问题,console 那边,是先拉取 Jenkinsfile 仓库到一个以 project_name@script 命名的路径,我需要执行的 shell 命令,以及一些需要引入模块的 groovy 文件也在里面。
  4. 在当前项目对应的 Jenkinsfile 里面通过 load,引入公共模块的 groovy 是没问题的。
 - lib  //类库
 - pipeline  
   - module //模块
      qywechat-notice
   ...
 - shell	// shell 脚本
     notice.sh
 - src 		// 各项目的 Jenkinsfile 文件

问题

  1. 但是 我需要执行其中的 shell 命令的时候,无法执行了,我进到 Jenkins 服务器,发现 shell 文件的地址是在 project_name@script 下面,而 jenkins 的环境变量 env.WORKSPACE 是 project_name,而这路径也不能硬编码,写死,所以有没有什么方式可以获取到 shell 文件的真实路径。
3328 次点击
所在节点    DevOps
3 条回复
monsterxx03
2020-09-03 14:02:54 +08:00
换个思路, 共享库里应该 export 一个 runScript 函数, 外部不要关心 script 具体路径.

jenkins pipeline 有点坑的, 如果你的 shell script 要求必须在脚本同一级目录运行, 尝试用 dir() 切到 workspace 之外的路径行不通的, 会报权限错误
lesteryou
2020-09-03 15:07:59 +08:00
@monsterxx03 你好,请问这个 `export 一个 runScript 函数`,不太理解,是定义个函数返回 shell 内容?您可以详细说下吗,谢谢了
monsterxx03
2020-09-03 15:14:14 +08:00
@lesteryou 我有点想多了, 你的需求用 resources folder 就可以了 https://www.jenkins.io/doc/book/pipeline/shared-libraries/#loading-resources

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/703844

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX