Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Groovy sed命令赢得';当从Jenkins处执行时,不要替换我的字符串_Groovy_Sed_Jenkins Pipeline_Jenkins Groovy - Fatal编程技术网

Groovy sed命令赢得';当从Jenkins处执行时,不要替换我的字符串

Groovy sed命令赢得';当从Jenkins处执行时,不要替换我的字符串,groovy,sed,jenkins-pipeline,jenkins-groovy,Groovy,Sed,Jenkins Pipeline,Jenkins Groovy,我有一个config.yml文件,其中包含以下内容: access_key: ACC_KEY secret_key: SEC_KEY 现在,我正试图用实际的访问密钥ans保密密钥替换ACC\u密钥和SEC\u密钥 我有一个groovy方法,它执行shell脚本,如下所示: def update(){ return this.execCmd("'sed -i s/ACC_KEY/${access_token}/g; s/SEC_KEY/${secret_token}/g' /root/.

我有一个
config.yml
文件,其中包含以下内容:

access_key: ACC_KEY
secret_key: SEC_KEY
现在,我正试图用实际的
访问密钥
ans
保密密钥
替换
ACC\u密钥
SEC\u密钥

我有一个groovy方法,它执行shell脚本,如下所示:

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\u token}
${secret\u token}
的值,但是它不会用这些值替换ACC\u KEY和secu KEY

如果看不到您拥有的整个config.yml,这将非常困难。使用像这样的config.yml,以及我下面介绍的groovy方法,应该可以满足您的需要

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
参考:

Groovy方法

您可以在Jenkins中设置环境变量并像这样访问它们

println "access_key : ${env.access_key} , secret_key: ${secret_key}"

参考资料:

如果看不到您拥有的整个config.yml,这很难。使用像这样的config.yml,以及我下面介绍的groovy方法,应该可以满足您的需要

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
参考:

Groovy方法

您可以在Jenkins中设置环境变量并像这样访问它们

println "access_key : ${env.access_key} , secret_key: ${secret_key}"

参考资料:

这句话显然是错的。单引号应该围绕
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
尽管如果这些变量来自环境,这也不正确;shell不会在单引号内替换变量,但可以使用双引号:

sed -i "s/ACC_KEY/${access_token}/g; s/SEC_KEY/${secret_token}/g" /root/.config/config.yml

如果有一种方法可以将这些值插入Groovy中已经存在的字符串中,那么这种方法可能会更加健壮。

引用显然是错误的。单引号应该围绕
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
尽管如果这些变量来自环境,这也不正确;shell不会在单引号内替换变量,但可以使用双引号:

sed -i "s/ACC_KEY/${access_token}/g; s/SEC_KEY/${secret_token}/g" /root/.config/config.yml
如果有一种方法可以将这些值插入Groovy中已经存在的字符串中,那么这种方法可能会更加健壮