背景介绍:小红有个python文件,需要每天定时运行,放在linux服务器上又怕失败了没有及时发现,因此想创建了一个jenkins job来运行,正常在Jenkins页面上创建job就可以了,现在小红想试试jenkins DSL的用法,所以功能就是写个Groovy脚本,用来设置Jenkins job的一些参数,然后在这个Groovy脚本中调用shell脚本,shell脚本里调用python脚本,也可以直接在Groovy脚本中调用python脚本。
一,Jenkins DSL是什么
DSL(Domain Specific Language) 是用Groovy语言编写的脚本,用来描述Jenkins 任务应该是什么样的。官方介绍自己找,大致了解就行
简单来说之前是通过Jenkins页面操作来新建job,现在运行你写得Groovy脚本就能出来一个新job,这个Groovy脚本还能被放在代码仓库里,如果job没有,直接跑一下就能出来新的。
写得groovy脚本如下
freeStyleJob("your-job-name") {
logRotator(30, -1, 14, -1) //可以删掉,这里是保留日志30天
triggers {
cron('0 8 * * *') //这里设置每天早上8点跑
}
scm {//这里告诉jenkins去哪里找到你的shell,python 脚本
git {
remote {
url('ssh://gerrit.ext.net.com:/your-repository) //这个库里存放your-shell 和your-python
credentials('your-ssh')
}
branch('your-branch(master)')
}
}
wrappers {
preBuildCleanup() //运行前清理工作区
timestamps() //日志输出显示时间戳
colorizeOutput() //输出带颜色高亮
}
steps {
shell("bash jobs/your_shell.sh")
}
}
然后在your_shell.sh里调用你的python代码就可以了,也可以直接写在shell里,比如shell('echo "Hello World"')
这个是your_shell.sh的内容举例
#!/usr/bin/env bash
set -e
echo "Current Date: $(date)"
pip3 install requests || echo "Dependencies might already be installed."
python3 scripts/your-python.py
echo "Process finished successfully."
好了,到这就准备好了groove文件了。
二,怎么运行Groove
将你写好的各个文件提交到远端仓库,比如master
这里需要注意给your-shell.sh文件执行权限后再提交
chmod +x your-shell.sh
接着在你jenkins页面搜索seed,找到seed job,运行这个job,注意看它运行的分支是不是包含你的提交
如果seed job运行成功在jenkins首页就可以看到名字为“your-job-name”的job了。
如果你们项目里有也是使用这种方式来创建job的,你就可以看看别人是怎么定义的。或者先在jenkins上找到你想建的类似的job,然后抄写它的groove文件。
三, 进阶知识
刚开始用groove新建job可能想测试,测试分两个,一个是groove新建的job本身,一个是groove里面调用的python文件。先说想测试groove新建的job本身,这个可以把groove文件推到自己的远端分支,然后找到seed job,把里面的master分支换成自己的远端分支,就可以了
现在说第二个,想测试groove里面调用的python文件。这个也一样需要让python文件放在远端测试分支上,然后在新建出来的job里输入你的测试分支就可以了,如果job可以支持输入branch作为参数,那就不用每次修改config了,所以这里插入给job设置传参的功能。要传的参数就是一个branch, 默认为master。
可以这样修改
freeStyleJob("SCM-Jira-To-Milvus-Sync") {
// 1. 添加参数配置
parameters {
// 定义一个字符串参数,名字叫 SCRIPTS_BRANCH,默认值是 master
stringParam('SCRIPTS_BRANCH', 'master')
}
logRotator(30, -1, 14, -1)
triggers {
cron('0 8 * * *')
}
scm {
git {
remote {
url('ssh://gerrit.ext.netxxx')
credentials('xxx')
}
branch('$SCRIPTS_BRANCH')
}
}
wrappers {
preBuildCleanup()
timestamps()
colorizeOutput()
}
steps {
shell("bash jobs/xxx.sh")
}
}
还有各种各样的用法,比如想在python 脚本里调用jenkins job里的环境变量等,灵活的很高,感兴趣可以尝试。
965

被折叠的 条评论
为什么被折叠?



