У меня есть приведенный ниже сценарий оболочки, который мне нужно отобразить в файле, например, script.sh из отличного интерфейса, такого как Jenkinsfile, но при этом продолжают появляться ошибки компиляции.

#!/bin/bash
commit_hash=$(git rev-parse HEAD)
parent_hashes=`git rev-list --parents -n 1 $commit_hash`
parent_count=`wc -w <<< $parent_hashes`
if [[ $parent_count -gt 2 ]]
then
  p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\S\+ master$'`
  if [[ ! -z $p ]]
  then
    echo "merged branch is master"
    exit 0
  else
    echo "merged branch is anything but master"
    exit 2
  fi
else
  echo "no branch merged"
  exit 1
fi

Я пробовал следующее: -

sh '''echo '#!/bin/bash
               commit_hash=$(git rev-parse HEAD)
               parent_hashes=`git rev-list --parents -n 1 $commit_hash`
               parent_count=`wc -w <<< $parent_hashes`
               if [[ $parent_count -gt 2 ]]
                 then
               p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\S\+ master$'`
               if [[ ! -z $p ]]
                  then
               echo "merged branch is master"
               exit 0
               else
              echo "merged branch is anything but master"
               exit 2
                fi
               else
              echo "no branch merged"
               exit 1
                fi' > script.sh'''
0
Ashley 2 Сен 2020 в 18:48

2 ответа

Лучший ответ

Вы можете попробовать использовать опцию writeFile для записи содержимого в файл, но в вашем случае вам нужно избегать только обратной косой черты в своем скрипте. Ниже должно работать.

pipeline {
    agent any
    stages {
        stage ("Test") {
            steps{
                writeFile file:'test.txt', text: '''#!/bin/bash
commit_hash=$(git rev-parse HEAD)
parent_hashes=`git rev-list --parents -n 1 $commit_hash`
parent_count=`wc -w <<< $parent_hashes`
if [[ $parent_count -gt 2 ]]
then
  p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\\S\\+ master$'`
  if [[ ! -z $p ]]
  then
    echo "merged branch is master"
    exit 0
  else
    echo "merged branch is anything but master"
    exit 2
  fi
else
  echo "no branch merged"
  exit 1
fi'''
            }
        }
    }
}
1
Kiruba 3 Сен 2020 в 09:20

Чтобы записать сценарий в файл, используйте шаг writeFile (см. здесь ). Это создаст файл в вашем рабочем пространстве из строки.

В декларативном конвейере это выглядит примерно так:

writeFile(file: "fileName", text: "Your Script")
0
Steve 3 Сен 2020 в 09:15