从詹金斯执行时,sed命令不会替换我的字符串

时间:2019-01-09 15:46:40

标签: groovy sed jenkins-pipeline jenkins-groovy

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

access_key: ACC_KEY
secret_key: SEC_KEY

现在,我尝试将ACC_KEYSEC_KEY替换为实际的access_keysecret_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。

2 个答案:

答案 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}"

参考:Jenkins Pipeline accessing environment variables

答案 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中已经存在的字符串中,那可能会更健壮。