我在一个项目中有一个Makefile,其外观大致如下:
.PHONY: lint test teamcity
lint:
# commands here
test:
# commands here
teamcity: lint test
我在make lint
和make test
中运行的工具可以通过查看TEAMCITY_VERSION
环境变量来确定它们是否在CI(TeamCity)中运行。但是,我们在TeamCity代理的Docker容器中运行它们,因此未设置变量。
我想实现以下目标:
make teamcity
时,必须在环境中设置了lint
的情况下运行test
和TEAMCITY_VERSION
目标中的命令; make test
或make lint
时,不会发生任何特殊情况(不得添加该变量,尽管如果在外部环境中进行了设置,则不必删除该变量)。我该如何实现?
答案 0 :(得分:0)
这对您有用吗?
.PHONY: lint test teamcity
lint:
# commands here
test:
# commands here
teamcity:
$(MAKE) TEAMCITY_VERSION=<whatever> lint test
第二个make调用在命令行上设置了TEAMCITY_VERSION
。因此,对于第二次调用,将设置TEAMCITY_VERSION
make变量,还设置所有配方的TEAMCITY_VERSION
shell环境变量。
答案 1 :(得分:0)
我最终做了以下事情:
import { CronJob } from 'cron';
Meteor.startup(() => {
new CronJob({
cronTime: '00 30 02 * * *',
// use this wrapper if you want to work with mongo:
onTick: Meteor.bindEnvironment(() => {
// stuff happens
})
start: true,
timeZone: 'America/Los_Angeles',
});
});
此处.PHONY: lint test teamcity
lint:
# commands here
test:
# commands here
teamcity: export TEAMCITY_VERSION=1
teamcity: lint test
被声明为特定于目标的变量,TEAMCITY_VERSION
伪指令将其导出到环境中以作为必备目标。