Команда sed не заменит мою строку при выполнении формы Jenkins - PullRequest
0 голосов
/ 09 января 2019

У меня есть файл config.yml, который содержит следующее:

access_key: ACC_KEY
secret_key: SEC_KEY

Теперь я пытаюсь заменить ACC_KEY и SEC_KEY фактическими access_key ans secret_key.

У меня есть метод groovy, который выполняет сценарий оболочки, как показано ниже:

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 голосов
/ 09 января 2019

Цитата определенно выглядит неправильно. Одинарные кавычки, вероятно, должны идти вокруг сценария 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, это, вероятно, будет несколько более надежным.

0 голосов
/ 09 января 2019

Не видя весь 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

Ссылка: https://jenkins.io/blog/2018/04/25/configuring-jenkins-pipeline-with-yaml-file/

Groovy метод :

Вы можете установить переменные окружения в Jenkins и получить к ним доступ следующим образом

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

Ссылка: Трубопровод Jenkins, обращающийся к переменным среды

...