jenkins中使用Pipeline script 和Pipeline script from SCM的区别
1|0Pipeline script from SCM
Pipeline script from SCM是从git上拉取Dockerfile,使用Dockerfile中的script去执行,但是要注意的是,当Dockerfile和代码在一个repo的时候,拉取Dockerfile其他代码也会一同拉取下来,因此脚本要把git credentialsId: 'admin', url: 'ssh://git@192.168.1.156:7999/aut/locust_test.git'
给注释掉,举个例子:
比如Dockerfile中的脚本是这样的:
pipeline { agent { docker { image 'docker.io/beck123/locust:v1'} } stages { stage("Git checkout") { steps { // sh ''' // if [ -d locust_test ] // then // rm -f locust_test // fi // ''' sh ''' echo "拉取代码前容器内部的文件:" ls -l ''' //git credentialsId: 'admin', url: 'ssh://git@192.168.1.156:7999/aut/locust_test.git' } } stage('Test') { steps { sh ''' echo "拉取代码后容器内部的文件:" ls -l locust -f src/locustfile.py --headless -u 100 -r 5 -t 120s -H http://192.168.1.2:8099 ''' } } } }
如果把jenkins workshop下的locust_test文件删了,会发现拉取前和拉取后的文件时间都一样
实际上开始拉取Dockerfile的时候,其他代码就一起拉下来了
2|0Pipeline script
使用Pipeline script,就需要在jenkins pipline的脚本里定义git credentialsId: 'admin', url: 'ssh://git@192.168.1.156:7999/aut/locust_test.git'
,不能注释掉,否则代码不会拉下来
pipeline { agent { docker { image 'docker.io/beck123/locust:v1'} } stages { stage("Git checkout") { steps { // sh ''' // if [ -d locust_test ] // then // rm -f locust_test // fi // ''' sh ''' echo "拉取代码前容器内部的文件:" ls -l ''' git credentialsId: 'admin', url: 'ssh://git@192.168.1.156:7999/aut/locust_test.git' } } stage('Test') { steps { sh ''' echo "拉取代码后容器内部的文件:" ls -l locust -f src/locustfile.py --headless -u 100 -r 5 -t 120s -H http://192.168.1.2:8099 ''' } } } }
3|0一个发现
如果仔细看jenkins home下的workspace,会发现即使容器销毁了,这里也会保留一个代码目录,我猜测这可能是docker容器的数据卷,容器创建后自动挂载到这个目录上,本身容器内也就相当于有了一份代码数据,如果代码有更新,那么只拉取更新部分的
[root@k8s-master workspace]# cd /var/lib/jenkins/workspace/ [root@k8s-master workspace]# pwd /var/lib/jenkins/workspace [root@k8s-master workspace]# ls locust_test locust_test@tmp [root@k8s-master workspace]# ls locust_test Dockerfile Jenkinsfile README.md requirements.txt src [root@k8s-master workspace]# ls -l locust_test 总用量 16 -rw-r--r-- 1 jenkins jenkins 178 12月 24 18:35 Dockerfile -rw-r--r-- 1 jenkins jenkins 938 12月 24 18:44 Jenkinsfile -rw-r--r-- 1 jenkins jenkins 109 12月 24 18:35 README.md -rw-r--r-- 1 jenkins jenkins 1045 12月 24 18:35 requirements.txt drwxr-xr-x 3 jenkins jenkins 65 12月 24 18:35 src [root@k8s-master workspace]#
可以做个实验,只更新Jenkinsfile,把运行时间设置长点,在运行时间内进入容器,查看对应目录下的文件,需要验证的是:
1.文件名和jenkins的workspace目录下文件名是否一致
2.更新时间是否一致
3.未更新的文件是否和前次的workspace目录下文件是否同一个(主要看更新时间)
更新前的jenkins workspace目录文件
beck@beckdeMacBook-Pro workspace % pwd /Users/beck/.jenkins/workspace beck@beckdeMacBook-Pro workspace % ls -l total 0 drwxr-xr-x 9 beck staff 288 12 24 20:27 locust_test drwxr-xr-x 2 beck staff 64 12 24 20:29 locust_test@tmp beck@beckdeMacBook-Pro workspace % cd locust_test beck@beckdeMacBook-Pro locust_test % ls -l total 32 -rw-r--r-- 1 beck staff 178 12 24 20:27 Dockerfile -rw-r--r-- 1 beck staff 940 12 24 20:27 Jenkinsfile -rw-r--r-- 1 beck staff 109 12 24 20:27 README.md -rw-r--r-- 1 beck staff 1045 12 24 20:27 requirements.txt drwxr-xr-x 5 beck staff 160 12 24 20:27 src
运行时容器内部的文件,需要加+8H,可以看到只有Dockerfile时间更新了
beck@beckdeMacBook-Pro locust_test % docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9cb7d9950cd7 beck123/locust:v1 "cat" 10 seconds ago Up 7 seconds confident_volhard beck@beckdeMacBook-Pro locust_test % docker exec -it 9cb /bin/bash I have no name!@9cb7d9950cd7:/Users/beck/.jenkins/workspace$ ls -l total 0 **drwxr-xr-x 9 501 dialout 288 Dec 24 14:10 locust_test ** drwxr-xr-x 3 501 dialout 96 Dec 24 14:11 locust_test@tmp I have no name!@9cb7d9950cd7:/Users/beck/.jenkins/workspace$ cd locust_test I have no name!@9cb7d9950cd7:/Users/beck/.jenkins/workspace/locust_test$ ls -l total 16 -rw-r--r-- 1 501 dialout 178 Dec 24 12:27 Dockerfile **-rw-r--r-- 1 501 dialout 343 Dec 24 14:10 Jenkinsfile** -rw-r--r-- 1 501 dialout 109 Dec 24 12:27 README.md -rw-r--r-- 1 501 dialout 1045 Dec 24 12:27 requirements.txt drwxr-xr-x 5 501 dialout 160 Dec 24 12:27 src I have no name!@9cb7d9950cd7:/Users/beck/.jenkins/workspace/locust_test$ pwd /Users/beck/.jenkins/workspace/locust_test
更新后的jenkins workspace目录文件,可以看到也是只有Dockerfile的时间更新了
beck@beckdeMacBook-Pro workspace % pwd /Users/beck/.jenkins/workspace beck@beckdeMacBook-Pro workspace % ls -l total 0 drwxr-xr-x 9 beck staff 288 12 24 22:10 locust_test drwxr-xr-x 2 beck staff 64 12 24 22:16 locust_test@tmp beck@beckdeMacBook-Pro workspace % cd locust_test beck@beckdeMacBook-Pro locust_test % ls -l total 32 -rw-r--r-- 1 beck staff 178 12 24 20:27 Dockerfile -rw-r--r-- 1 beck staff 343 12 24 22:10 Jenkinsfile -rw-r--r-- 1 beck staff 109 12 24 20:27 README.md -rw-r--r-- 1 beck staff 1045 12 24 20:27 requirements.txt drwxr-xr-x 5 beck staff 160 12 24 20:27 src
__EOF__

本文链接:https://www.cnblogs.com/my_captain/p/17003440.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器