Замените версию pom, используя sed в Jenkinsfile - PullRequest
0 голосов
/ 30 января 2019

У меня есть переменная myStr, которая содержит следующее значение:

    "app": {
    "services": {
      "app": [{
          "groupID": "com.mycompany",
          "artifactId": "myapp-versions",
          "version": "1.0.0"
        },
        {
          "groupID": "com.mycompany.xyz",
          "artifactId": "car-stats",
          "version": "1.0-master"
        },

        {
          "groupID": "com.mycompany.service",
          "artifactId": "my-differential-service",
          "version": "1.0.0-master"
        }

    ]
  }
}

Теперь я хочу заменить версию только my-differential-service artifactId на NEW_VERSION.

Iпопытался использовать команду sed для переменной myStr, но не смог, так как я не очень знаком с этой командой.

Может кто-нибудь подсказать мне, как мне добиться этого?Любая помощь будет высоко оценен.

Ответы [ 2 ]

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

Если имеется jq, поздравляю!и, пожалуйста, попробуйте следующее:

echo "{ $myStr }" | jq '(.app.services.app[] | select(.artifactId == "my-differential-service") | .version) = "NEW_VERSION"'

, что дает:

{
  "app": {
    "services": {
      "app": [
        {
          "groupID": "com.mycompany",
          "artifactId": "myapp-versions",
          "version": "1.0.0"
        },
        {
          "groupID": "com.mycompany.xyz",
          "artifactId": "car-stats",
          "version": "1.0-master"
        },
        {
          "groupID": "com.mycompany.service",
          "artifactId": "my-differential-service",
          "version": "NEW_VERSION"
        }
      ]
    }
  }
}

Если вам не нужны внешние фигурные скобки, удалите их с помощью расширения параметров bash или чего-то подобного.

В качестве запасного варианта вы можете сказать: sed:

echo "$myStr" | sed '
:l
N
$!b l
s/\("my-differential-service"[^"]*"version": *\)"[^"]*"/\1"NEW_VERSION"/g'

Надеюсь, это поможет.

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

Когда вам нужно sed для анализа, ищите поддержку опции -z в вашем sed.Эта опция игнорирует специальное значение \n.
Когда вы знаете, что версия является первым полем после artifactId, вы можете попробовать

new_version=1.0.1 # avoid uppercase variable names
echo "$myStr" | 
   sed -rz 's/("my-differential-service",[^:]*: ")[^"]*/\1'"${new_version}"'/'

Когда порядок полей может измениться, вы можете захотетьпопросите jq в Jenkins или попробуйте awk.
Если вы хотите использовать sed, но у вас нет опции -z, вы можете сначала перевести:

echo "$myStr" | tr '\n' '\r' | sed -r 's/..../' | tr '\r' '\n'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...