我在多个版本的NodeJS上运行travis。例如。 6,7,8,9。
在构建过程中,我运行代码覆盖和其他事情。
有没有办法跳过在特定NodeJS上运行这些脚本?
e.g。代码覆盖率工具只需要在其中一个版本(例如最高版本)上运行。
这将为我节省一些时间和travis的资源。
例如,我想在下面的before_install
中的NodeJS 6和8上跳过before_script
,after_script
,after_success
和.travis.yml
:
node_js:
- '9'
- '8'
- '6'
branches:
only:
- master
- /^greenkeeper.*$/
before_install:
- npm install -g greenkeeper-lockfile@1
before_script: greenkeeper-lockfile-update
script:
- npm run verify
after_script: greenkeeper-lockfile-upload
after_success:
- npm install -g travis-deploy-once@4
- travis-deploy-once "npm run semantic-release"
- npm install --no-save coveralls && npm run coveralls
- npm install --no-save codecov && npm run codecov
答案 0 :(得分:2)
您可以使用简单的if语句:
int i = 0;
do {
cin>>str[i];
} while (cin && !std::isspace(str[i]) && ++i < sizeof(str));
if (i == sizeof(str))
{
str[sizeof(str)-1] = '\0';
}
if语句检查before_install: >
node_version=$(node -v);
if [ ${node_version:1:1} = 9 ]; then
echo "succes!";
npm install -g greenkeeper-lockfile@1;
else
echo "else";
fi
的第二个字符是否等于node -v
同一行:
9
PS:我强烈建议您使用documentation中所述的bash脚本,而不是before_install:
- node_version=$(node -v); if [ ${node_version:1:1} = 5 ]; then npm install -g greenkeeper-lockfile@1; else echo "else"; fi
中的脚本。
答案 1 :(得分:1)
感谢Night Train,这就是我最终做的事情:
#! /bin/bash
if [ $1 = 'latest' ]; then
target_version=$(npm info node version);
else
target_version=$1;
fi
node_version=$(node -v);
if [ ${node_version:1:1} = ${target_version:0:1} ]; then
echo "Detected ${node_version}, satisfying ${target_version}. Executing command";
eval $2;
else
echo "NodeJS ${node_version} instead of latest (${target_version:0:1}) is detected. Skipping command";
fi
在.travis.yml
:
after_success:
- ./scripts/run-on-node-version.sh latest "npm install --no-save coveralls && npm run coveralls"
- ./scripts/run-on-node-version.sh latest "npm install --no-save codecov && npm run codecov"
这样我可以将操作保存在一个位置(.travis.yml
),其他CI可以将./scripts/run-on-node-version.sh
用于其他目的。
https://gist.github.com/unional/f3ba0ba96df85d7ca957b2df1318dfdf