jenkins - 如何强制 Jenkins 共享库在同一主机上运行?
问题描述
我有詹金斯管道,并且有多个用管道语法编写的阶段。其中一个阶段是拉动 git repo 的结帐阶段,接下来是运行共享库的构建阶段。但似乎共享库有时在不同的节点上运行,与执行 git checkout 的节点相比,因为在共享库中运行 groovy 脚本的构建阶段没有找到执行某些操作所需的 git 文件。我该如何解决这个问题?以下是我的管道:
@Library("my-shared-library2-temp") _
pipeline {
agent any
environment {
SVC_ACCNT = credentials('abc')
}
stages {
stage('Git') {
steps {
withCredentials([file(credentialsId: 'abc.json', variable: 'metadata')]) {
script {
sh 'cat $metadata > outFile'
def metadataJson = readFile 'outFile'
def res = tgsJsonParser("${REPOSITORY}", metadataJson)
env.gitURL = res;
}
}
}
}
stage('Checkout') {
steps {
script {
sh "echo $env.gitURL"
def url = "abc.com"
sh "git clone --single-branch --branch test $url"
}
}
}
stage('Build') {
steps {
script {
fxn('Prod')
}
}
}
}
}
Checkout 和 Build 似乎在不同的节点上运行,这就是为什么 build 中的 fxn 无法通过 Checkout 阶段访问 repo checkout。如何解决这个问题?共享库中的 Groovy 脚本需要读取 git 文件的所有名称并执行一些操作。
当共享库中的 groovy 脚本尝试访问应签出路径中的文件时,出现以下错误:
java.io.FileNotFoundException: /usr/mware/.jenkins/workspace/Deployment/test@2/abc
at org.codehaus.groovy.runtime.ResourceGroovyMethods.checkDir(ResourceGroovyMethods.java:1043)
at org.codehaus.groovy.runtime.ResourceGroovyMethods.eachFile(ResourceGroovyMethods.java:1062)
at org.codehaus.groovy.runtime.dgm$937.doMethodInvoke(Unknown Source)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1213)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1022)
at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:47)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.methodCall(DefaultInvoker.java:19)
at tgsDeploy.deployProd(/opt/nfs/.jenkins-HOST/jobs/Deployment/jobs/test/builds/222/libs/my-shared-temp/vars/mygroovy.groovy:85)
at tgsDeploy.call(/opt/nfs/.jenkins-HOST/jobs/Deployment/jobs/test/builds/222/libs/my-shared-library2-temp/vars/mygroovy.groovy:61)
最后一个语句中使用的 HOST 是 master,但作业在 slave 上运行。即使我在获取奴隶后加载库,仍然存在相同的错误
解决方案
推荐阅读
- npm - 我无法成功使用 install npm packages
- node.js - 在heroku服务器上部署项目时无法访问我的nodejs api
- python - 如何获得回归以优化系数和数据数组?Python
- asp.net - SignalR 可以与 oracle 数据库一起使用吗?
- python-3.x - bigquery 存储 api 在创建读取会话时挂起
- swift - Swift 中 JSONSerialization.jsonObject(with:options:) 的返回类型是什么?
- python - 为什么 .pop() 删除具有相同索引的所有值?
- c++ - c++ std::vector 迭代器构造函数,第一个 == 最后
- c++ - 字符串操纵器使用 C++ 中的所有函数
- python - 如何使用 selenium/python 编辑 chrome 搜索和主页?