英文:
Including asterisks (*) in Circle CI environment variable causes strange side effects in the value of the environment variable
问题
我在 Circle CI 的环境变量中有一个 cron 调度,让我们称之为 CRON_SCHEDULE
,用于在 Go 应用程序中使用。假设所需的调度字符串是 0 15 13 * * *
,表示每天下午 1:15:00,即 13:15:00。
cron 没有触发,我进行了调查。当我在 Go 应用程序中打印出 CRON_SCHEDULE
时,前三个数字是正确的,但是在三个 "*" 的位置上,我看到的是应用程序文件本身的内容:
my_app docker-compose.yml Dockerfile go.mod go.sum main.go README.md tests utils
明确一下,这是从 fmt.Print(os.Getenv("CRON_SCHEDULE"))
输出的完整内容:
0 15 13 my_app docker-compose.yml Dockerfile go.mod go.sum main.go README.md tests utils my_app docker-compose.yml Dockerfile go.mod go.sum main.go README.md tests utils my_app docker-compose.yml Dockerfile go.mod go.sum main.go README.md tests utils
非常奇怪!
在 Circle CI 变量中,*
是否有特殊含义?如果有,我该如何正确转义它?或者这是 Docker 的一个怪癖(从 Docker 容器中运行 Go 应用程序),*
被打印为文件?我现在完全不知道发生了什么!
我目前的猜测是,由于 bash shell 转义的问题,当你在环境变量中有 *
字符时,它们被错误地注入到容器/应用程序环境中。
编辑:我可以确认尝试转义这些字符可以解决这个问题。然而,当然,cron 库仍然无法理解 0 15 13 \* \* \*
!
英文:
I have a cron schedule in an Circle CI environment variable, lets call it CRON_SCHEDULE
to be used within a Go application. Let's say the desired schedule string is 0 15 13 * * *
, for every day exactly 1:15:00 PM, i.e. 13:15:00
The cron wasn't firing and I went to investigate. When I log out CRON_SCHEDULE
from within the Go application, I get the first three numbers correctly, but instead of the three "*" I see instead the contents of the application files itself:
my_app docker-compose.yml Dockerfile go.mod go.sum main.go README.md tests utils
To be clear, this is the full exact output from fmt.Print(os.Getenv("CRON_SCHEDULE"))
:
0 15 13 my_app docker-compose.yml Dockerfile go.mod go.sum main.go README.md tests utils my_app docker-compose.yml Dockerfile go.mod go.sum main.go README.md tests utils my_app docker-compose.yml Dockerfile go.mod go.sum main.go README.md tests utils
Very strange!
Does *
within a Circle CI variable have a special meaning? If so, how can I escape this properly? Or is this instead a Docker quirk (running the Go app from a docker container) and *
is being printed as the files? No idea what is going on right now!
My current guess is that due to bash shell escaping fun, that when you have the *
character in an environment variable, they're injected incorrectly into the container / application environment.
EDIT: I can confirm trying to escape these characters removes this 'bug'. However then of course the cron library still can't understand 0 15 13 \* \* \*
!
答案1
得分: 1
Zeke的问题指引我找到了正确的方向。显然,如果你的Circle CI环境文件中有*
字符(或许还有其他字符!),你需要对环境注入进行转义。通过以下方式将内容追加到我的.env文件中解决了这个问题:
echo CRON_SCHEDULE="{$CRON_SCHEDULE}" >> .env
英文:
Zeke's question pointed me in the right direction. Apparently, you need to escape the environment injection if you have *
characters (and perhaps there are others!) in your Circle CI environment files. Appending to my .env file with:
echo CRON_SCHEDULE="${CRON_SCHEDULE}" >> .env
Resolved the issue.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论