有没有一种方式可以在不提交代码的情况下本地执行这些流水线?
由于Pipeline脚本的目的是编写Jenkins脚本,因此您无法在本地执行它。这也是为什么最好将您的Jenkinsfile
保持简短,并将其限制为实际涉及Jenkins功能的代码;您的实际构建逻辑应该通过您通过一行sh
或bat
步骤调用的外部进程或构建工具来处理。
如果您想测试Jenkinsfile
的更改但不想提交它,请使用1.14中添加的Replay功能。
JENKINS-33925跟踪自动化测试框架的功能请求。
在所选位置创建名为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
构建本地 Jenkins 镜像
这只需要在第一次或者在 Dockerfile 中添加内容后进行一次即可。
$ docker build -t local_jenkins /opt/docker/jenkins/
启动和重启本地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
请确保 /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
jenkins@e7b23bad10aa:/$
的内容看到。@后面的哈希值肯定是不同的。jenkins@e7b23bad10aa:/$ ssh-keygen
在所有问题上按回车键,直到您收到提示返回
将密钥复制到您的计算机上。从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
命令并查看。
不要停留在这里,因为我们有一系列的 SSH shell 需要退出。
$ exit
jenkins@e7b23bad10aa:/$ exit
没错! 现在我们回来了,准备继续。
安装Jenkins
Jenkins本地地址为http://localhost:8787。在首次使用本地浏览器访问Jenkins时,将出现安装向导。默认设置即可,但确保在安装过程中安装流水线插件。
配置Jenkins
非常重要的一点是,在http://localhost:8787/configureSecurity上启用基于矩阵的安全性,并通过添加自己到矩阵并选中所有框来赋予权限。(最右边有一个选中所有框的图标)
/opt/docker/jenkins/jenkins_home
文件夹后重新启动。添加git用户
我们需要允许我们的git挂钩使用最少的权限登录到本地Jenkins。只需查看和构建作业即可满足要求。因此,我们创建一个名为git
的用户,密码为login
。
将浏览器直接指向http://localhost:8787/securityRealm/addUser,将git
作为用户名,login
作为密码添加。然后点击“[创建用户]”。
将权限添加到git用户
在浏览器中转到http://localhost:8787/configureSecurity页面。将git用户添加到矩阵中:
User/group to add:
字段中输入git
,然后点击[ Add ]
现在是时候勾选最小权限的框了。只需要这些权限:
确保未选中Prevent Cross Site Request Forgery exploits
复选框,然后点击[ Save ]
我们假设我们有用户名user
,并且我们启用了 git 的项目名为project
,位于/home/user/projects/project
目录下,其中包含Jenkinsfile
文件。
在您的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
字段中输入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"
将此文件设为可执行:
$ chmod +x /home/user/projects/project/.git/hooks/post-commit
测试提交后钩子:
$ /home/user/projects/project/.git/hooks/post-commit
在Jenkins中检查您的hookpipeline项目是否被触发。
最后对您的项目进行任意更改,添加更改并提交。这将在本地Jenkins中触发流水线。
愉快的一天!
$ docker inspect jenkins | grep Gateway
- javabeangrinderssh user@docker.for.mac.localhost
而不是使用IP地址。还要确保您已经从macOS系统偏好设置->共享文件夹菜单启用了远程登录功能。 - pangiolecurl -v -XPOST -u git:$API_TOKEN http://localhost:8787/job/VMInit/build
。请参见https://www.jenkins.io/doc/book/system-administration/authenticating-scripted-clients/。 - millebi简而言之
详细解释
Jenkins流水线测试变得越来越麻烦。与传统的声明式作业配置方法不同,用户受限于UI暴露的内容,新的Jenkins流水线是构建过程的编程语言,您可以在其中混合声明性部分和自己的代码。作为优秀的开发人员,我们也希望对此类代码进行一些单元测试。
当开发Jenkins流水线时,有三个步骤需要遵循。第一步应覆盖80%的使用情况。
示例
pipelineUnit GitHub 仓库包含一些 Spock 示例,用于演示如何使用Jenkins Pipeline 单元测试框架
截至2017年7月底,使用Blue Ocean插件,您可以直接在可视化流水线编辑器中检查声明性流水线的语法。当您点击“配置”时,该编辑器仅适用于github项目(这是一个已知问题,他们正在努力使其也适用于git等)。
但是,如此问题所述,您可以通过浏览以下内容打开编辑器:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
然后在页面中间单击并按下Ctrl+S
,这将打开一个文本区域,您可以在其中粘贴管道声明脚本。当您单击更新时,如果存在语法错误,编辑器将告诉您语法错误的位置。就像这张截图中一样:
虽然有点晚了,但这就是我写的 jenny
,它是一些核心Jenkinsfile步骤的重新实现。(https://github.com/bmustiata/jenny)
使用VS Code的Jenkins Jack扩展,您可以通过本地文件在本地或远程运行的Jenkins上测试您的Jenkinsfile,而无需使用git push方式。而且您将在VS Code中获得作业的运行日志,能够在Jenkins中创建作业等等。我希望这对于更多寻找开发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 job。 将Definition
选项选择为Pipeline script from SCM
,将SCM
选项选择为Git
。
将项目的git仓库链接粘贴到Repository URL中,并将Jenkinsfile
粘贴到脚本名称框中。
然后点击lightweight checkout
选项并保存项目。
这样,每当您提交更改到git仓库时,都可以通过在Jenkins中每次运行Build Now
来测试更改。请按照以下视觉指南中的说明轻松设置Jenkins Pipeline的作业。