Jenkinsfile 创建临时组织失败

Jenkinsfile Creating Scratch Org Failing

我正在尝试使用 Jenkins 在 BitBucket 和 Salesforce 之间创建持续集成,但我在创建 Scratch Org 时遇到了问题。我认为 Jenkinsfile 设置正确。这是:

node {

def SF_JENKINSUSER = env.SF_JENKINS_USER
def SF_USERNAME = env.SF_JENKINS_USER + '.' + env.SF_DEV
def SF_URL = env.SF_TESTURL
def SF_PROD = env.SF_PRODURL
def SF_DEV_HUB = env.SF_DEVHUB

stage('Checkout Source') {
    checkout scm
}

withEnv(["HOME=${env.WORKSPACE}"]) {    
    withCredentials([string(credentialsId: 'SF_CONSUMER_KEY_BIND', variable: 'SF_CONSUMER_KEY'), file(credentialsId: 'SERVER_KEY_CREDENTALS_ID', variable: 'server_key_file')]) {
        stage('Authorize DevHub Org') {
            try {
                rc = command "sfdx force:auth:jwt:grant -r ${SF_PROD} -i ${SF_CONSUMER_KEY} -u ${SF_JENKINSUSER} -f ${server_key_file} --setdefaultdevhubusername -a ${SF_DEV_HUB}"
                if ( rc != 0 ) {
                    echo '========== ERROR: ' + rc
                    error 'Salesforce org authorization failed.'
                }
                else {
                    command "sfdx force:org:list"
                    echo '========== LOGGED IN =========='
                }
            }
            catch (err) {
                echo "========== DEVHUB AUTHORIZATION FAILURE: ${err} =========="
            }           
        }

        // Create a new scratch org to test the repo
        stage('Create Test Scratch Org') {
            try {
                rc = command "sfdx force:org:create -s -f config\project-scratch-def.json -a TestScratch -w 10 -d 1"
                if (rc != 0) {
                    error 'Salesforce test scratch org creation failed.'
                }
            }
            catch (err) {
                echo "========== SCRATCH ORG CREATION FAILURE: ${err} =========="
            }                
        }
    }  
}   }   
def command(script) {
if ( isUnix() ) {
    return sh(returnStatus: true, script: script);
} 
else {
    return bat(returnStatus: true, script: script);
}

对这里的格式表示歉意。现在,我无法弄清楚结果。它说组织的连接状态是 JwtGrantFailure 并且它正在寻找 server.key 文件而不是命令行中的临时 json 文件。以下是此作业输出的相关部分:

E:\DevOps_Root\JENKINS\workspace\TestingCIPipeline2>sfdx force:org:list 
=== Orgs
 ALIAS     USERNAME                       ORG ID              CONNECTED STATUS
(D)  DevHub    sa.jenkins@[...].com           00D300000000UicEAE  JwtGrantError


 No active scratch orgs found. Specify --all to see all scratch orgs
[Pipeline] echo
========== LOGGED IN ==========
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Create Test Scratch Org)
[Pipeline] isUnix
[Pipeline] bat

E:\DevOps_Root\JENKINS\workspace\TestingCIPipeline2>sfdx force:org:create -s -f config\project-scratch-def.json -a TestScratch -w 10 -d 1 
ERROR running force:org:create:  ENOENT: no such file or directory, open 
'E:\DevOps_Root\JENKINS\workspace\Pipe@tmp\secretFiles\e0ab232f-1958-42d1-b3bb-aed5e00a562f\server.key'
[Pipeline] echo
========== SCRATCH ORG COMMAND FAILURE: 1

当我已经 运行 withCredentials 成功时,为什么作业还要查找 server.key 文件?我在这里错过了什么?

如有任何见解,我们将不胜感激。

好的..这个让我困惑了一段时间,但我终于得到了创建临时组织的脚本。

我通过远程桌面连接登录到 Jenkins 虚拟服务器,打开 windows 资源管理器,导航到 Jenkins User .sfdx 文件夹并删除了以下文件:

alias.json
key.json
user@domain.json
stash.json

在我这样做之后,我在 Jenkinsfile 中做了一些更新并将更改推送到存储库。工作 运行,并创建了 Scratch Org。

我的新问题是试图弄清楚如何再次拥有相同的工作 运行,因为我们将有多个回购协议处理这个单一的工作。

无论如何,我希望这对面临同样问题的你们中的一些人有所帮助。