sor*_*rin 177 jenkins jenkins-workflow jenkins-pipeline
在编写jenkins管道时,为了查看它是否有效,提交每个新更改似乎非常不方便.
有没有办法在不提交代码的情况下在本地执行这些?
Jes*_*ick 119
您无法在本地执行Pipeline脚本,因为它的全部目的是编写Jenkins脚本.(这就是为什么最好保留Jenkinsfile
简短且限于实际处理Jenkins功能的代码的原因之一;您的实际构建逻辑应该使用外部流程或构建工具来处理,您可以通过单行sh
或bat
步骤调用它们.)
如果要测试更改为Jenkinsfile
直播但未提交,请使用1.14中添加的重播功能
JENKINS-33925跟踪自动测试框架的需求.
jav*_*der 61
我有一个适合我的解决方案.它由一个在docker中运行的本地jenkins和一个git web hook组成,用于在每次提交时触发本地jenkins中的管道.您不再需要推送到github或bitbucket存储库来测试管道.
这只是在linux环境中测试过的.
尽管这条指令有点长,但使这项工作变得相当简单.大多数步骤都在那里.
创建一个名为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
Run Code Online (Sandbox Code Playgroud)
构建local_jenkins图像
这只需要执行一次或在向Dockerfile添加内容之后.
$ docker build -t local_jenkins /opt/docker/jenkins/
Run Code Online (Sandbox Code Playgroud)
启动并重新启动local_jenkins
有时您想轻松启动并重新启动jenkins.例如,重启机器后.为此,我制作了一个别名,我把它.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
Run Code Online (Sandbox Code Playgroud)
确保该/opt/docker/jenkins/jenkins_home
文件夹存在,并且您具有用户对其的读写权限.
要启动或重新启动jenkins,只需键入:
$ localjenkinsrestart
Run Code Online (Sandbox Code Playgroud)
您在本地jenkins中执行的所有操作都将存储在/ opt/docker/jenkins/jenkins_home文件夹中,并在重新启动之间保留.
在docker jenkins中创建一个ssh访问密钥
这是工作的一个非常重要的部分.首先,我们启动docker容器并为其创建一个bash shell:
$ localjenkinsrestart
$ docker exec -it jenkins /bin/bash
Run Code Online (Sandbox Code Playgroud)
您现在已进入docker容器,您可以通过jenkins@e7b23bad10aa:/$
终端中的内容查看.@之后的哈希肯定会有所不同.
创建密钥
jenkins@e7b23bad10aa:/$ ssh-keygen
Run Code Online (Sandbox Code Playgroud)
在所有问题上按Enter键,直到收到提示
将密钥复制到您的计算机.如果你想知道,从docker容器内你的计算机是172.17.0.1.
jenkins@e7b23bad10aa:/$ ssh-copy-id user@172.17.0.1
Run Code Online (Sandbox Code Playgroud)
user =您的用户名和172.17.0.1是Docker容器中计算机的IP地址.
此时您必须输入密码.
现在让我们尝试通过从docker容器中ssh到您的计算机来完成循环.
jenkins@e7b23bad10aa:/$ ssh user@172.17.0.1
Run Code Online (Sandbox Code Playgroud)
这次你不需要输入密码.如果你这样做,出了点问题,你必须再试一次.
您现在将在您的计算机主文件夹中.试试吧ls
.
不要停在这里,因为我们有一系列ssh shell需要摆脱.
$ exit
jenkins@e7b23bad10aa:/$ exit
Run Code Online (Sandbox Code Playgroud)
对!现在我们回来了,准备继续.
安装你的Jenkins
您可以在浏览器中找到您当地的Jenkins:http:// localhost:8787.
第一次将浏览器指向本地Jenkins时,您将使用安装向导进行操作.默认设置很好,但请确保在安装过程中安装管道插件.
设置你的jenkins
这是非常重要的,你在激活基于矩阵的安全//本地主机:8787/configureSecurity HTTP和给自己的所有权利,加入自己的矩阵,勾选所有的箱子.(最右边有一个勾选方框图标)
Jenkins’ own user database
安全领域Matrix-based security
在"授权"部分中选择User/group to add:
然后单击[ Add ]
按钮Prevent Cross Site Request Forgery exploits
未选中该复选框.(因为这个Jenkins只能通过你的电脑访问,所以这不是什么大问题)[ Save ]
并注销Jenkins,然后再次确认它是否有效.
如果不是,则必须从头/opt/docker/jenkins/jenkins_home
重新开始并在重新启动之前清空文件夹添加git用户
我们需要允许我们的git hook以最小的权限登录我们的本地Jenkins.只是为了看到和建立工作就足够了.因此,我们创建一个名为git
password 的用户login
.
将浏览器指向http:// localhost:8787/securityRealm/addUser并添加git
为用户名和login
密码.点击[ Create User ]
.
将权限添加到git用户
转到浏览器中的http:// localhost:8787/configureSecurity页面.将git用户添加到矩阵:
git
在字段中写入User/group to add:
并单击[ Add ]
现在是时候检查git用户的最小权限框了.只需要这些:
确保Prevent Cross Site Request Forgery exploits
取消选中该复选框并单击[ Save ]
我们假设我们user
有用户名和我们的git启用项目,其中Jenkinsfile
调用project
并位于/home/user/projects/project
在您的http:// localhost:8787中, Jenkins添加了一个新的管道项目.我把它命名为hookpipeline以供参考.
New Item
Jenkins菜单中的hookpipeline
[ OK ]
Poll SCM
Build Triggers部分中的复选框.将计划留空.Pipeline script from SCM
Repository URL
现场进入user@172.17.0.1:projects/project/.git
Script Path
现场进入Jenkinsfile
转到该/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"
Run Code Online (Sandbox Code Playgroud)
使此文件可执行:
$ chmod +x /home/user/projects/project/.git/hooks/post-commit
Run Code Online (Sandbox Code Playgroud)
测试post-commit钩子:
$ /home/user/projects/project/.git/hooks/post-commit
Run Code Online (Sandbox Code Playgroud)
如果您的hookpipeline项目被触发,请检查Jenkins.
最后对项目进行一些任意更改,添加更改并执行提交.这将在您当地的Jenkins中触发管道.
快乐的时光!
Vad*_*imo 50
TL; DR
Jenkins管道单元测试框架
长版
Jenkins管道测试变得越来越痛苦.与传统的声明性作业配置方法不同,用户仅限于UI公开的内容,新的Jenkins管道是构建过程的完全成熟的编程语言,您可以将声明性部分与您自己的代码混合.作为优秀的开发人员,我们也希望对这种代码进行一些单元测试.
在开发Jenkins管道时,您应该遵循三个步骤.在步骤1中应涵盖的用途的情况下的80%.
例子
该pipelineUnit GitHub库包含有关如何使用一些斯波克例子詹金斯管道单元测试框架
fir*_*pol 16
在撰写的那一刻(2017年7月结束)与蓝海插件,您可以直接在检查管道声明的语法可视化编辑器的管道.编辑从蓝海UI的工作,当你点击"配置"仅适用于GitHub的项目(这是一个已知的问题,他们正在努力使这也对工作的git等).
但是,正如本问题中所解释的,您可以打开编辑器浏览:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
然后单击页面中间,然后按Ctrl+S
,这将打开一个textarea,您可以在其中粘贴管道声明性脚本.单击" 更新"时,如果存在语法错误,编辑器将通知您语法错误的位置.就像在这个截图中:
如果没有语法错误,textarea将关闭,页面将显示您的管道.不要担心它不会保存任何东西(如果它是一个github项目,它将提交Jenkinsfile更改).
我是Jenkins的新手,这非常有帮助,没有这个我不得不多次提交一个Jenkins文件,直到它工作(非常烦人!).希望这可以帮助.干杯.
在我的开发设置中——缺少合适的 Groovy 编辑器——大量 Jenkinsfile 问题源于简单的语法错误。要解决此问题,您可以针对您的 Jenkins 实例(运行于$JENKINS_HTTP_URL
)验证 Jenkinsfile :
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
上面的命令是https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line 的一个稍微修改过的版本
归档时间: |
|
查看次数: |
86500 次 |
最近记录: |