Передача параметров из CI Jenkins в npm скрипт - PullRequest
1 голос
/ 28 марта 2020

Когда я запускаю сборку Jenkins, я хотел бы передать COMMIT_HASH и BRANCH_NAME в один из моих javascript файлов: publish.js, чтобы я мог удалить жестко запрограммированные значения для tags и consumerVersion.

Вот мой код:

Jenkinsfile

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

пакет. json

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

. / Src / test / pact / publi sh. 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()
});

Кто-нибудь знает, как это сделать?

1 Ответ

1 голос
/ 28 марта 2020

Вы можете передать аргументы cli в ваш скрипт узла, который в итоге получится в process.argv . Также npm передает cli аргументы через две черты --.

. Чтобы проиллюстрировать это, рассмотрим следующий пример:

Jenkinsfile

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

пакет. json

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

publi sh. 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]);

I оставил кли флаги для простоты. Надеюсь, это поможет

...