作者:卓菘碧625 | 来源:互联网 | 2023-07-27 18:30
我们的iOS系统信息库中有一个.xcode-version
文件,fastlane使用该文件来确保使用正确的版本来构建项目。不同的分支需要不同版本的Xcode来构建,并且不同的节点安装了不同版本的Xcode。 (每个节点确实有多个Xcode安装,但是有时安装新版本的Xcode会破坏旧的安装,这就是为什么我们不立即更新所有Xcode。)因此,每个节点无法构建每个分支,因此我们需要根据该分支的.xcode-version
中的内容选择节点。
有一个鸡和鸡蛋的问题,因为只有在选择节点之后才会检出该文件。但是,考虑到Jenkins在选择节点并执行管道之前正在检出Jenkinsfile
,这应该不是问题。我不明白为什么任何文件都无法做到这一点。
如何从管道中的git中检出任意文件并根据其内容做出任意决定(例如节点选择)?
一种肮脏的方法是使用版本文件的原始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 {
...
}
}