在编写jenkins管道时,提交每个新更改以查看它是否有效似乎非常不方便。
是否有一种方法可以在本地执行这些而不提交代码?
据我所知,这个管道插件是新的Jenkinsfile机制的“引擎”,所以我很肯定你可以用这个来本地测试你的脚本。
我不确定是否有任何额外的步骤,当你复制到一个Jenkinsfile,但语法等应该完全相同。
编辑:在“engine”上找到引用,检查这功能描述,最后一段,第一个条目。
您不能在本地执行Pipeline脚本,因为它的全部目的是编写Jenkins脚本。(这就是为什么最好让你的Jenkinsfile保持简短,并限制在实际处理Jenkins特性的代码中;你实际的构建逻辑应该由外部进程或构建工具来处理,你可以通过一行sh或bat步骤调用它们。)
Jenkinsfile
sh
bat
如果你想测试对Jenkinsfile的更改,但没有提交,请使用1.14中添加的Replay特性。
詹金斯- 33925跟踪自动测试框架的特性请求。
博士TL;
在开发Jenkins pipeline时,您应该遵循三个步骤。步骤1。应该覆盖80%的用例。
例子
pipelineUnit GitHub回购包含一些关于如何使用Jenkins Pipeline单元测试框架的Spock示例
在我的开发设置中——缺少一个合适的Groovy编辑器——大量的詹金斯文件问题源于简单的语法错误。为了解决这个问题,你可以对Jenkins实例(运行在$JENKINS_HTTP_URL)验证Jenkinsfile:
$JENKINS_HTTP_URL
curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate
以上命令是对 -a-Declarative-Jenkinsfile-from-the-command-line https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating- (or-linting) < / p >
除了其他人已经提到的重放功能(关于它的有用性也一样!),我发现以下功能也很有用:
在使用蓝色的海洋插件编写(2017年7月底)时,您可以直接在可视化管道编辑器中检查声明性管道的语法。编辑器,从蓝海UI工作时,你点击“配置”仅为github项目(这是一个已知的问题,他们正在努力使它也工作在git等)。
但是,正如这个问题中解释的那样,你可以打开编辑器浏览到:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
然后单击页面中间,并按Ctrl+S,这将打开一个文本区域,您可以在其中粘贴管道声明性脚本。当你点击更新时,如果有语法错误,编辑器会让你知道语法错误在哪里。就像这张截图:
Ctrl+S
< / >
如果没有语法错误,文本区域将关闭,页面将显示您的管道。别担心,它不会保存任何东西(如果它是一个github项目,它会提交Jenkinsfile更改)。
我是Jenkins的新手,这是非常有用的,没有这个,我不得不多次提交一个Jenkins文件,直到它工作(非常讨厌!)希望这能有所帮助。欢呼。
我有一个很适合我的解决办法。它由一个运行在docker中的本地jenkins和一个git web钩子组成,在每次提交时触发本地jenkins中的管道。你不再需要推送到你的github或bitbucket存储库来测试管道。
这只在linux环境中测试过。
这是相当简单的工作,虽然这个指令有点长。大多数步骤都在那里。
创建一个名为Dockerfile的文件。我将它放置在/opt/docker/jenkins/Dockerfile中,用这个填充它:
/opt/docker/jenkins/Dockerfile
FROM jenkins/jenkins:lts USER root RUN apt-get -y update && apt-get -y upgrade # Your needed installations goes here USER jenkins
构建local_jenkins映像
您只需要在Dockerfile中添加一些内容后执行一次。
$ docker build -t local_jenkins /opt/docker/jenkins/
启动并重新启动local_jenkins
不时地你想启动和重启詹金斯容易。例如,在重新启动机器后。为此,我创建了一个别名,并将其放在我的主文件夹中的.bash_aliases中。
.bash_aliases
$ echo "alias localjenkinsrestart='docker stop jenkins;docker rm jenkins;docker run --name jenkins -i -d -p 8787:8080 -p 50000:50000 -v /opt/docker/jenkins/jenkins_home:/var/jenkins_home:rw local_jenkins'" >> ~/.bash_aliases $ source .bash_aliases # To make it work
确保/opt/docker/jenkins/jenkins_home文件夹存在,并且你对它有用户读写权限。
/opt/docker/jenkins/jenkins_home
要启动或重启jenkins,只需输入:
$ localjenkinsrestart
你在本地jenkins中所做的一切都将存储在/opt/docker/jenkins/jenkins_home文件夹中,并在重启期间保存。
在docker jenkins中创建ssh访问密钥
这是非常重要的一部分。首先,我们启动docker容器并为它创建一个bash shell:
$ localjenkinsrestart $ docker exec -it jenkins /bin/bash
现在你已经进入了docker容器,你可以在终端中看到类似jenkins@e7b23bad10aa:/$的东西。@后面的散列肯定会不同。
jenkins@e7b23bad10aa:/$
创建密钥
jenkins@e7b23bad10aa:/$ ssh-keygen
在所有问题上按enter键,直到返回提示
复制密钥到您的计算机。在docker容器中,您的计算机是172.17.0.1。
jenkins@e7b23bad10aa:/$ ssh-copy-id user@172.17.0.1
User =您的用户名,172.17.0.1是从docker容器中到您的计算机的IP地址。
这时您必须输入密码。
现在,让我们尝试从docker容器内通过ssh连接到您的计算机来完成循环。
jenkins@e7b23bad10aa:/$ ssh user@172.17.0.1
这次您应该不需要输入密码了。如果你这样做了,说明出了问题,你必须再试一次。
您现在将在计算机的主文件夹中。试试ls,看看。
ls
不要在这里停下来,因为我们需要退出一系列ssh shell。
$ exit jenkins@e7b23bad10aa:/$ exit
没错!现在我们回来了,准备继续。
安装Jenkins
你可以在浏览器中http://localhost:8787找到你当地的Jenkins。
设置你的jenkins
它是非常重要的,您通过将自己添加到矩阵并勾选所有方框来激活基于http://localhost:8787/configureSecurity和给自己所有的权利的安全性矩阵。(在最右边有一个打勾图标)
Jenkins’ own user database
Matrix-based security
User/group to add:
[ Add ]
Prevent Cross Site Request Forgery exploits
[ Save ]
添加git用户
我们需要允许我们的git钩子以最小的权限登录到我们的本地Jenkins。只要看到并创造就业机会就足够了。因此,我们创建了一个名为git的用户,密码为login。
git
login
[ Create User ]
增加git用户的权限
在浏览器中转到http://localhost:8787/configureSecurity页面。将git用户添加到矩阵中:
现在是时候检查git用户的最小权限了。只需要这些:
确保未选中Prevent Cross Site Request Forgery exploits复选框,然后单击[ Save ]
我们假设我们的用户名是user,我们启用git的项目中有Jenkinsfile,叫做project,位于/home/user/projects/project
user
project
/home/user/projects/project
在你的http://localhost:8787 Jenkins中添加一个新的管道项目。我将其命名为hookpipeline以供参考。
New Item
hookpipeline
[ OK ]
Poll SCM
Pipeline script from SCM
Repository URL
user@172.17.0.1:projects/project/.git
Script Path
转到/home/user/projects/project/.git/hooks文件夹并创建一个名为post-commit的文件,其中包含以下内容:
/home/user/projects/project/.git/hooks
post-commit
#!/bin/sh BRANCHNAME=$(git rev-parse --abbrev-ref HEAD) MASTERBRANCH='master' curl -XPOST -u git:login http://localhost:8787/job/hookpipeline/build echo "Build triggered successfully on branch: $BRANCHNAME"
使这个文件可执行:
$ chmod +x /home/user/projects/project/.git/hooks/post-commit
测试后提交钩子:
$ /home/user/projects/project/.git/hooks/post-commit
通知詹金斯你的钩子管道项目是否被触发。
最后对你的项目做一些随意的改变,添加这些改变并提交。这将触发本地Jenkins的管道。
快乐的日子!
将SSH密钥放入Jenkins配置文件中,然后使用声明式短绒,如下所示:
ssh jenkins.hostname.here declarative-linter < Jenkinsfile
这将对你的詹金斯档案进行静态分析。在您选择的编辑器中,定义一个自动运行该命令的键盘快捷方式。在Visual Studio Code中,这是我使用的,转到任务>配置任务,然后使用以下JSON创建验证Jenkinsfile命令:
{ "version": "2.0.0", "tasks": [ { "label": "Validate Jenkinsfile", "type": "shell", "command": "ssh jenkins.hostname declarative-linter < ${file}" } ] }
有点晚了,但这就是为什么我写了jenny,一个小的重新实现一些核心的Jenkinsfile步骤。(https://github.com/bmustiata/jenny)
jenny
我使用重放未来,做一些更新和运行迅速。
Jenkins有一个“重放”功能,它可以让你快速重放作业而不更新源:
有一些限制,对于脚本管道,我使用这个解决方案:
node('master') { stage('Run!') { def script = load('...you job file...') } }
def execute() { ... main job code here ... } execute()
为了简单起见,您可以在git存储库的根目录下创建一个Jenkinsfile,类似于下面基于声明性管道的groovy语法的示例'Jenkinsfile'。
pipeline { agent any stages { stage('Build the Project') { steps { git 'https://github.com/jaikrgupta/CarthageAPI-1.0.git' echo pwd() sh 'ls -alrt' sh 'pip install -r requirements.txt' sh 'python app.py &' echo "Build stage gets finished here" } } stage('Test') { steps { sh 'chmod 777 ./scripts/test-script.sh' sh './scripts/test-script.sh' sh 'cat ./test-reports/test_script.log' echo "Test stage gets finished here" } } }
https://github.com/jaikrgupta/CarthageAPI-1.0.git
您现在可以在Jenkins中将一个新项目设置为Pipeline作业。 选择Definition作为Pipeline script from SCM和Git作为SCM选项。 将项目的git repo链接粘贴到Repository URL中,并将Jenkinsfile粘贴到脚本名称框中。 然后单击lightweight checkout选项并保存项目。 因此,无论何时你将一个提交推到git回购,你总是可以在Jenkins中每次运行Build Now测试更改
Definition
Git
SCM
lightweight checkout
Build Now
请按照以下视觉效果中的说明轻松设置Jenkins Pipeline的工作。
您可以验证您的管道以找出语法问题。Jenkins为Jenkisfile验证 - https://jenkins_url/pipeline-model-converter/validate提供了很好的API
使用curl并传递.Jenkinsfile,您将立即得到语法检查
curl --user username:password -X POST -F "jenkinsfile=<jenkinsfile" https://jenkins_url/pipeline-model-converter/validate
您可以将此工作流添加到编辑器:
这是一个简短的解决方案,可以让我非常快速地测试管道代码:
pipeline { agent any options { skipDefaultCheckout true timestamps() } parameters { text(name: 'SCRIPT', defaultValue: params.SCRIPT, description: 'Groovy script') } stages { stage("main") { steps { script { writeFile file: 'script.groovy', text: params.SCRIPT def groovyScript = load 'script.groovy' echo "Return value: " + groovyScript } } // steps } // stage } // stages } // pipeline
skipDefaultCheckout true
defaultValue: params.SCRIPT
load
有了这个设置,我可以在其他jenkins文件中测试一切,包括使用共享库。
使用VS Code 詹金斯杰克扩展,你可以在不使用git推送的情况下测试你的Jenkins文件,从你的本地文件到本地或远程运行的Jenkins。你将在VS Code中有作业的运行日志,能够在Jenkins中创建作业和更多的工作人员。我希望这有助于更多的人寻找一种方法来开发詹金斯档案。