我编写了一个通用管道,它接受几个参数,以便将预定义GitHub存储库中的版本部署到特定节点。我想将这个管道托管在GitHub上的Jenkinsfile上,所以我将作业配置为使用“来自SCM的管道脚本”。事实是,当我尝试构建作业时,Jenkinsfile在每个节点上都被签出。是否可以仅在主节点上签出和执行Jenkinsfile,并按预期运行管道?
编辑:正如我之前所说,管道工作得很好,并且按照预期将作业设置为使用管道脚本。问题是,当我尝试将其更改为“来自SCM的管道脚本”时,Jenkinsfile会在每个代理上签出,这是一个问题,因为我没有在除master之外的任何代理上安装git。我希望Jenkinsfile仅在主代理上签出并按预期执行。仅供参考以下管道:
def agents = "$AGENTS".toString()
def agentLabel = "${ println 'Agents: ' + agents; return agents; }"
pipeline {
agent none
stages {
stage('Prep') {
steps {
script {
if (agents == null || agents == "") {
println "Skipping build"
skipBuild = true
}
if (!skipBuild) {
println "Agents set for this build: " + agents
}
}
}
}
stage('Powershell deploy script checkout') {
agent { label 'master' }
when {
expression {
!skipBuild
}
}
steps {
git url: 'https://github.com/owner/repo.git', credentialsId: 'git-credentials', branch: 'main'
stash includes: 'deploy-script.ps1', name: 'deploy-script'
}
}
stage('Deploy') {
agent { label agentLabel }
when {
expression {
!skipBuild
}
}
steps {
unstash 'deploy-script'
script {
println "Execute powershell deploy script on agents set for deploy"
}
}
}
}
}
您可以使用脚本化管道来实现这一点,它基本上应该是这样的
node('master') {
checkout scm
stash includes: 'deploy-script.ps1', name: 'deploy-script'
}
def stepsForParallel = [:]
env.AGENTS.split(' ').each { agent ->
stepsForParallel["deploy ${agent}"] = { ->
node(agent) {
unstash 'deploy-script'
}
}
parallel stepsForParallel
我认为你在要求不可能的事情。
您的Jenkinsfile在您的jenkins配置中,并以此方式发送给您的每个代理。您的代理上不需要git
。
由于您使用git,SCM=git。你是说:我的管道需要从git存储库中获取。您正在声明要在代理{label agentLabel}
上运行的部署步骤,因此该步骤应该在主代理以外的另一个代理上运行。您如何想象代理可以让Jenkinsfile的内容知道该做什么,而不使用git?
我认为skipDefaultCheckout是您想要的:
pipeline {
options {
skipDefaultCheckout true
}
stages {
stage('Prep') {
steps {
script {
........................
}
}
}
}
}
看看留档:
默认情况下,skipDefaultCheckout在代理指令中跳过从源代码管理签出代码。
https://www.jenkins.io/doc/book/pipeline/syntax/
我的问题是我的pyspark作业没有并行运行。 代码和数据格式: 我的PySpark如下所示(显然是简化的): PySpark的全部要点是并行运行这个东西,显然不是这样。我在各种集群配置中运行了这些数据,最后一个配置是大量的,这时我注意到它是单一节点使用的。因此,为什么我的工作需要很长时间才能完成,而时间似乎与集群规模无关。 所有较小数据集的测试在我的本地机器和集群上都没有问题。我真的只是需要高档
我刚开始用几个Raspberry pi设备创建自己的Kubernetes集群。我用的是Alex Ellis的指南。但是我有一个问题,我的NodePort只能从实际运行容器的Pod中工作。因此没有从不运行容器的Pod进行重定向。 服务部署(&D kubectl get服务 在不同于主机的节点上和总是返回连接定时。 sudo iptables-保存(在230主节点上) sudo iptables-保存
我的一台远程机器上有硒集线器,其他机器也有硒节点。 是有集线器的机器,我有一个本地节点和一个远程节点。 两者都连接到远程集线器,但是chrome不在远程节点上运行,而是在本地运行。 当我运行上面的代码(在远程节点上)时,我得到以下异常: 硒。常见的例外。WebDriverException:Message:u“未知错误:Chrome无法启动:崩溃\n(驱动程序信息:chromedriver=2.1
我对在Mesos上测试Spark运行感兴趣。我在Virtualbox中创建了一个Hadoop2.6.0单节点集群,并在其上安装了Spark。我可以使用Spark成功地处理HDFS中的文件。
我试图在正式生产环境中对cassandra节点运行nodetool修复,但没有成功,它给出了以下错误。 **在 /10.253.189.222 中验证失败(进度:0%) DEBUG[ReadRepairStage:99093]2018-11-22 06:29:35,411 ReadCallback.java:234摘要不匹配:org . Apache . Cassandra . service .
目前,Jenkins 上有多个管道(A、B、C)和节点(X、Y、Z)。我们启用了 Throttle Concurrent Builds 插件,以确保管道中只有一个构建在单个节点上运行。 问题是,使用这种方法,来自不同管道的构建可能会发生冲突(例如,管道A可能已经在节点X上执行,我们不希望任何其他管道在节点X上执行,直到管道A完成)。TCB插件确保来自单个管道的多个构建不会在一个节点上运行,但它不会