【问题标题】:How can I check the value of a file in git before selecting Jenkins node?如何在选择 Jenkins 节点之前检查 git 中文件的值?
【发布时间】:2020-03-15 06:49:15
【问题描述】:

我们的 iOS 存储库中有一个 .xcode-version 文件,fastlane 使用该文件来确保使用正确的版本来构建项目。不同的分支需要不同版本的 Xcode 来构建,不同的节点安装了不同版本的 Xcode。 (我们确实每个节点都安装了多个 Xcode,但有时安装新版本的 Xcode 会破坏旧的安装,这就是为什么我们不会一次更新所有这些。)所以每个节点不能构建每个分支,我们需要根据该分支的.xcode-version 中的内容选择节点。

有一点先有鸡还是先有蛋的问题,因为直到选择了节点之后才会签出该文件。但是,考虑到 Jenkins 在选择节点和执行管道之前检查了Jenkinsfile,这应该不是问题。我不明白为什么任何文件都不能做到这一点。

如何从管道中的 git 签出任意文件并根据其内容做出任意决定(例如节点选择)?

【问题讨论】:

  • 你找到成功了吗?
  • 很抱歉没有早点跟进。我还没有尝试过,因为有一些更高优先级的工作。这只是一个问题,直到所有节点都升级完毕,所以由于现在所有节点都升级了,这暂时不是优先事项。

标签: xcode git jenkins


【解决方案1】:

一种肮脏的做法是使用版本文件的原始git url将其下载到工作区中,读取其内容,并在进入管道块之前设置代理/节点。

例如:

node {
    withCredentials([usernameColonPassword(credentialsId: 'mylogin', variable: 'USERPASS')]) {
        sh 'curl -u "$USERPASS" https://raw.github.myorg/myrepo/${GIT_BRANCH}/.xcode-version -O .xcode-version'
        def version = readFile('.xcode-version').trim()
        switch(version) {
            case 'x.xx':
                agentLabel = 'agentX';
                break;
            case 'y.yy':
                agentLabel = 'agentY';
                break;
        }
    }
}
pipeline {
    agent {
        label agentLabel
    }
    stages {
    ...
    }
}

【讨论】:

  • 这有点粗糙,但看起来应该可以。我希望 git 插件中有一些简洁的功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
相关资源
最近更新 更多