我有一个 config.yml
文件,该文件包含以下内容:
access_key: ACC_KEY
secret_key: SEC_KEY
现在,我尝试将ACC_KEY
和SEC_KEY
替换为实际的access_key
和secret_key
。
我有一个执行以下脚本的常规方法:
def update(){
return this.execCmd("'sed -i s/ACC_KEY/${access_token}/g; s/SEC_KEY/${secret_token}/g' /root/.config/config.yml")
}
我在方法内部指定了 sed
命令的方式是否存在问题?因为,每当我执行Jenkins作业时,我都能够获取${access_token}
和${secret_token}
的值,但是它不会用这些值替换ACC_KEY和SEC_KEY。
答案 0 :(得分:1)
在没有看到整个config.yml的情况下很难。像这样的config.yml和下面介绍的常规方法可以满足您的需求!
config.yml
config:
dockerfile: .woloxci/Dockerfile
project_name: some-project-name
services:
- postgresql
- redis
steps:
analysis:
- bundle exec rubocop -R app spec --format simple
- bundle exec rubycritic --path ./analysis --minimum-score 80 --no-browser
setup_db:
- bundle exec rails db:create
- bundle exec rails db:schema:load
test:
- bundle exec rspec
security:
- bundle exec brakeman --exit-on-error
audit:
- bundle audit check --update
environment:
RAILS_ENV: test
GIT_COMMITTER_NAME: a
GIT_COMMITTER_EMAIL: b
LANG: C.UTF-8
access_key: ACC_KEY
secret_key: SEC_KEY
参考:https://jenkins.io/blog/2018/04/25/configuring-jenkins-pipeline-with-yaml-file/
时髦方法:
您可以在Jenkins中设置环境变量并像这样访问它们
println "access_key : ${env.access_key} , secret_key: ${secret_key}"
答案 1 :(得分:1)
引号肯定看起来是错误的。单引号可能应该放在sed
脚本周围;
# XXX Probably still wrong; see below
sed -i 's/ACC_KEY/${access_token}/g; s/SEC_KEY/${secret_token}/g' /root/.config/config.yml
如果这些变量来自环境,那也不正确;外壳程序不会在单引号内替换变量,但是您可以使用双引号:
sed -i "s/ACC_KEY/${access_token}/g; s/SEC_KEY/${secret_token}/g" /root/.config/config.yml
如果有一种方法可以将这些值插值到Groovy中已经存在的字符串中,那可能会更健壮。