Как я могу загрузить файл credentials.json в задание конвейера jenkins?

#jenkins #jenkins-plugins #jenkins-groovy

#дженкинс #дженкинс-плагины #дженкинс-заводной

Вопрос:

У меня есть скрипт, который работает с API каталогов Google.

Цель этого скрипта — загрузить всех пользователей из каталога Google нашей компании.

Но когда я запускаю этот скрипт, он выдает ошибку

 FileNotFoundError: [Errno 2] No such file or directory: 'credentials.json'
  

Хотя этот файл находится в папке.

Нужно ли мне поместить этот файл в диспетчер учетных данных или ….?

У меня также есть файл groovy, который просто устанавливает pip и активирует venv и ничего больше.

Вот заводной код

 stage('Check activity') {
      steps {
        sh 'pwd'
        sh '''#!/bin/bash
          set -e
          if ! which pipenv >/dev/null; then
              echo 'no pipenv, installing...'
              pip3 install --user pipenv
              if ! which pipenv >/dev/null; then
              # default location for: /home/jenkins/.local/bin/pipenv
              my_pip_env="/home/${USER}/.local/bin/pipenv"
              fi
          else
              echo 'pipenv already installed, nothing to do.'
              my_pip_env=$(which pipenv)
          fi
          # pipenv version, check amp; install
          ${my_pip_env} --version
          ${my_pip_env} install
          # run script
          PYTHONPATH=$(pwd):${PYTHONPATH} \
          PIPENV_PIPFILE=$(realpath ./Pipfile) \
          ${my_pip_env} run -v python3  ./it/google-users/google_user.py -v "${VERSION}" -dr "${DRY_RUN}" -et "${EXCLUDED_TYPES}"
          # Remove virtualenv project
          ${my_pip_env} --rm
        '''
      }
    }
  

нужно ли мне определять переменные среды в скрипте groovy?

Комментарии:

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

Ответ №1:

При чтении файла из рабочей области лучше всего использовать функцию ReadFile

 readFile('credentials.json')
  

В вашем случае вы могли бы прочитать его в переменную, а затем передать его в следующие шаги вашего скрипта. Что-то вроде этого:

 pipeline {
    agent any
    stages {
        stage('Check activity')
        {
            steps {
                script {
                    sh '''#!/bin/bash
                       echo "hello" > hello.txt
                    '''
                    def mydata = readFile('hello.txt')
                    sh "echo My file data: ${mydata}"
                }
            }
        }
    }
}
  

Комментарии:

1. @Suresh но я хочу знать, как groovy script может передать этот ‘credentials.json’ моему сценарию? и он может его запустить? или мне нужно установить плагин привязки учетных данных, а затем я могу добавить атрибут withCredential в свой groovy-файл?

2. @bizimunda Спасибо за фрагмент кода. Я привел лучший пример, основанный на этом. Я не думаю, что вам нужен withCredentials, потому что с точки зрения кода это просто файл, сгенерированный некоторым кодом, и не имеет значения, имеет ли он фактические учетные данные или нет.