如何在Jenkinsfile中执行Shell脚本?

39

我将一个名为urltest.sh的shell脚本文件保存在/var/lib/jenkins中,并从jenkins构建中执行该文件。

当我执行构建时,它失败了。

The Environment Variables are - 
HOME -          /var/lib/jenkins ;
JENKINS_HOME -  /var/lib/jenkins

控制台输出如下:

Started by user anonymous
Building in workspace /var/lib/jenkins/workspace/AutoScript
[AutoScript] $ /bin/sh -xe /tmp/hudson2777728063740604479.sh
+ sh urltest.sh
sh: 0: Can't open urltest.sh
Build step 'Execute shell' marked build as failure
Finished: FAILURE

我应该把shell脚本文件放在哪里才能让它被执行?


1
在您的另一个脚本中指定 urltest.sh 的绝对路径。 - devnull
谢谢 @devnull,问题已解决。 - Kworks
我发现教程 https://github.com/softwaresaved/build_and_test_examples/blob/master/jenkins/Shell.md 非常有用。 - vikramvi
@vikramvi 你测试过吗?看起来是这样的:如果我有主节点和从节点,我需要将脚本添加到所有从节点,对吗? - PaPu
4个回答

61
根据此问题的浏览量,看起来很多人正在访问这个问题以了解如何设置执行shell脚本的作业。
以下是在Jenkins中执行shell脚本的步骤:
- 在Jenkins的主页面中选择“新建项目”。 - 输入一个项目名称,比如“my shell script job”,并选择“自由风格项目”。点击“确定”。 - 在配置页面中,在“构建”块中点击“添加构建步骤”下拉菜单,选择“执行shell”。 - 在文本区域中,你可以粘贴一个脚本或指示如何运行现有的脚本。你可以说:
#!/bin/bash

echo "hello, today is $(date)" > /tmp/jenkins_test

或者只是

/path/to/your/script.sh
  • 点击保存

  • 现在,新创建的任务应该与其他任务一起出现在Jenkins主页上。打开它并选择立即构建来查看是否工作正常。一旦完成,请从构建历史记录中选择该特定构建,并阅读控制台输出以查看是否发生了预期的所有操作。

    您可以在GitHub文档 创建Jenkins shell脚本任务 中获取更多详细信息。


    24

    如果您看到错误消息,它会说:

    在/var/lib/jenkins/workspace/AutoScript工作区构建

    根据您的注释,您已将urltest.sh放在

    /var/lib/jenkins

    因此,Jenkins无法找到该文件。 在您的构建步骤中执行此操作,它将起作用。

    cd             # which will point to /var/lib/jenkins
    ./urltest.sh   # it will run your script
    

    如果仍然失败,请尝试将文件的所有者更改为jenkins用户,因为jenkins用户可能没有文件权限,但是我认为如果您执行上述步骤,您就能够运行。


    8

    之前的回答都是正确的,但这里还有一种方法和一些提示:

    选项 #1 进入你的 Jenkins 任务,搜索 "添加构建步骤",然后将你的脚本复制粘贴到那里

    选项 #2 进入 Jenkins 并再次执行相同的操作 "添加构建步骤",但这次在其中完全限定路径上放置你的脚本,例如:./usr/somewhere/helloWorld.sh

    输入图像描述 输入图像描述

    需要注意的事项/提示:

    • 环境变量: 如果你的任务正在同时运行,那么你需要担心并发问题。一个任务可能会设置环境变量的值,而下一个任务可能会使用该值或者基于该值执行某些操作,从而导致不正确。
    • 确保所有路径都是完全限定的
    • 考虑记录/var/log或其他地方,这样你也有服务器上可以查看的内容(可选)
    • 考虑空间问题和权限问题,在 Linux 环境中,空间不足和权限问题非常普遍
    • 警报并确保你的脚本/任务在脚本执行失败时使 Jenkins 任务失败

    7

    有一个名为托管脚本插件的插件,它提供了一种简单的管理用户脚本的方法。它还添加了一个构建步骤操作,允许您选择要执行的用户脚本。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接