代码之家  ›  专栏  ›  技术社区  ›  Angelina

将参数从Jenkins CI传递到npm脚本

  •  0
  • Angelina  · 技术社区  · 6 年前

    当我运行Jenkins构建时,我想通过 COMMIT_HASH BRANCH_NAME 转到我的一个javascript文件: publish.js ,这样我就可以删除的硬编码值 tags consumerVersion .

    这是我的代码:

    詹金斯档案

    stage('Publish Pacts') {
        steps {
            script {
                sh 'npm run publish:pact -Dpact.consumer.version=${COMMIT_HASH} -Dpact.tag=${env.BRANCH_NAME}'
            }
        }
    }
    

    package.json

    "scripts": {
        "publish:pact": "node ./src/test/pact/publish.js"
    }
    

    ./src/test/pact/publish.js

    let publisher = require('@pact-foundation/pact-node');
    let path = require('path');
    
    let opts = {
        providerBaseUrl: `http://localhost:${global.port}`,
        pactFilesOrDirs: [path.resolve(process.cwd(), 'pacts')],
        pactBroker: 'http://localhost:80',
        tags: ["prod", "test"], // $BRANCH_NAME
        consumerVersion: "2.0.0" // $COMMIT_HASH
    };
    
    publisher.publishPacts(opts).then(() => {
        console.log("Pacts successfully published");
        done()
    });
    

    有人知道怎么做吗?

    0 回复  |  直到 6 年前
        1
  •  3
  •   Dominik Roberto C Dl Garza    6 年前

    您可以将cli参数传递给节点脚本,这些参数最终会出现在您的 process.argv . npm也传递了 cli arguments 通过两个破折号 -- .

    为了说明这一点,请考虑以下示例:

    詹金斯档案

    stage('Publish Pacts') {
        steps {
            script {
                sh 'npm run publish:pact -- ${COMMIT_HASH} ${env.BRANCH_NAME}'
            }
        }
    }
    

    package.json

    "scripts": {
        "publish:pact": "node ./src/test/pact/publish.js"
    }
    

    publish.js

    // process.argv[0] = path to node binary
    // process.argv[1] = path to script
    
    console.log('COMMIT_HASH:',process.argv[2]);
    console.log('BRANCH_NAME:',process.argv[3]);
    

    为了简单起见,我省略了cli标志。 希望这能有所帮助

    推荐文章