如何在Bitbucket Pipelines构建时替换environment.ts的logglyKey并解决提取问题?
解决Bitbucket Pipelines中替换environment.ts里logglyKey的问题
我来帮你搞定这个问题——你当前的grep命令因为正则表达式的问题,没法正确捕获logglyKey的值,我先帮你修正提取逻辑,再给你一套完整的Bitbucket Pipelines替换流程。
先看你grep命令的问题
你的正则'logglyKey'\s*:\s*'([A-Za-z0-9-])'有两个明显的问题:
- 括号里的
([A-Za-z0-9-])只匹配单个字符,但你的logglyKey是一串带连字符的长字符串,得用+来匹配多个字符,也就是([A-Za-z0-9-]+) - 另外,你如果想直接提取key值(不带引号和前面的键名),可以用Perl正则的
\K特性简化操作
修正后的提取命令
如果只是想提取当前的logglyKey,用这个命令就够了:
OLD_LOGGLY_KEY=$(grep -oP "logglyKey\s*:\s*'\K[A-Za-z0-9-]+" ./src/environments/environment.ts) echo "Previous logglyKey was: ${OLD_LOGGLY_KEY}"
这里的\K会忽略掉前面匹配的logglyKey: '部分,直接返回后面的key值,不用再额外处理引号。
完整的替换方案(适配Bitbucket Pipelines)
其实不需要单独提取,直接用sed原地修改文件更高效,下面是完整的addLogglyKey.sh脚本:
#!/bin/bash # 可选:提取并打印旧的logglyKey,用于日志排查 OLD_LOGGLY_KEY=$(grep -oP "logglyKey\s*:\s*'\K[A-Za-z0-9-]+" ./src/environments/environment.ts) echo "Previous logglyKey was: ${OLD_LOGGLY_KEY}" # 用Bitbucket Pipelines的环境变量替换logglyKey # 假设你在Bitbucket仓库变量里设置的环境变量叫 BITBUCKET_LOGGLY_KEY sed -i "s/logglyKey\s*:\s*'[A-Za-z0-9-]*'/logglyKey: '${BITBUCKET_LOGGLY_KEY}'/" ./src/environments/environment.ts # 可选:验证替换结果 NEW_LOGGLY_KEY=$(grep -oP "logglyKey\s*:\s*'\K[A-Za-z0-9-]+" ./src/environments/environment.ts) echo "New logglyKey is: ${NEW_LOGGLY_KEY}"
配置Bitbucket Pipelines
- 先去你的Bitbucket仓库的 Repository settings > Repository variables 里添加
BITBUCKET_LOGGLY_KEY变量,值填你要替换的logglyKey。 - 然后修改
bitbucket-pipelines.yml,添加执行脚本的步骤:
pipelines: default: - step: name: Replace Loggly Key image: alpine:latest # 轻量Linux镜像,也可以用你项目的基础镜像 script: - chmod +x ./addLogglyKey.sh # 给脚本加执行权限 - ./addLogglyKey.sh artifacts: - src/environments/environment.ts # 如果后续构建步骤需要用到修改后的文件,保留这行
注意事项
- 如果是在本地macOS测试,sed的
-i参数需要加空后缀:sed -i "" "s/...",但Bitbucket Pipelines用的是Linux环境,直接用sed -i就行。 - 正则里的
[A-Za-z0-9-]*能匹配任意长度的logglyKey(包括空值),确保替换能覆盖各种情况。
这样配置后,每次Bitbucket Pipelines构建时,都会自动把environment.ts里的logglyKey替换成你设置的环境变量值。
内容的提问来源于stack exchange,提问作者Piyush Patel
相关产品推荐
相关产品推荐

