git clone в сценарии оболочки с использованием учетных данных от Jenkins

avatar
merilstack
1 июля 2021 в 21:40
735
1
0

Я пытаюсь клонировать репозиторий на сервере, используя учетные данные, хранящиеся в Jenkins, и выполняю определенные операции с этим репозиторием.

pipeline {
    options {
        skipDefaultCheckout()
        timestamps()
    }
    parameters {
        string(name: 'FILENAME', defaultValue: 'tmp', description: 'Enter the file name that needs to be copied')
        string(name: 'DB_NAME', defaultValue: 'tmp_db', description: 'Enter the database name that needs to be created')
        string(name: 'VERSION', defaultValue: '1', description: 'Enter the DB name version')
        choice(name: 'RUN', choices: 'Migrate Data', description: 'Data migration')
    }
    agent {
        node { label 'myserver' }
    }
    triggers {
        pollSCM('H/5 * * * *')
    }
    stages {
        stage('Clean & Clone') {
            steps {
                cleanWs()
                git(branch: 'jenkinsfilr-branch',
                        credentialsId: 'lsdeploy-github',
                        url: 'https://github.com/xyz')
            }
        }
        stage('Run the shell script On-prem'){
            steps {
                git(branch: 'progress',
                        credentialsId: 'lsdeploy-github',
                        url: 'https://github.com/abc')
                 }
                configFileProvider([configFile(fileId: 'env-on-prem', targetLocation: '.env')]) {
                    sh  '''
                            bash -x ./ops/database-migration/migrate.sh ${FILENAME} ${DB_NAME} ${VERSION}
                    '''
                }
            }
        }
    }
}

Файл migrate.sh содержит операции, выполняемые в папке abc (клонировано из https://github.com/abc), а файл migrate.sh находится в репозитории xyz (клонировано из https://github.com/xyz). В этом случае, поскольку репозиторий abc клонирован последним, jenkins выдает ошибку, что не может найти сценарий migrate.sh. Есть ли способ избежать этой ошибки? Я попытался выполнить git clone --branch progress https://github.com/abc в сценарии migrate.sh, но он запрашивает учетные данные. Я попробовал другой способ, чтобы я мог хранить учетные данные в Jenkins, а также клонировать репо. Любая помощь?

Источник
bk2204
2 июля 2021 в 00:50
0

Можете ли вы раскрыть учетные данные в переменной среды? Если это так, вы можете использовать эту запись из Git FAQ.

Shane Bishop
2 июля 2021 в 01:07
0

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

Shane Bishop
2 июля 2021 в 01:09
1

Я думаю, что вам нужно сделать cd в каталог xyz, прежде чем запускать сценарий migrate.sh. Или же вы можете cp скрипт migrate.sh в свой рабочий каталог, а затем запустить его.

merilstack
2 июля 2021 в 14:03
0

Спасибо @ShaneBishop, это было так просто и сработало

Ответы (1)

avatar
merilstack
2 июля 2021 в 14:07
0

Спасибо @shane Bishop, вот решение, которое наконец сработало

pipeline {
    options {
        skipDefaultCheckout()
        timestamps()
    }
    parameters {
        string(name: 'FILENAME', defaultValue: 'tmp', description: 'Enter the file name that needs to be copied')
        string(name: 'DB_NAME', defaultValue: 'tmp_db', description: 'Enter the database name that needs to be created')
        string(name: 'VERSION', defaultValue: '1', description: 'Enter the DB name version')
        choice(name: 'RUN', choices: 'Migrate Data', description: 'Data migration')
    }
    agent {
        node { label 'myserver' }
    }
    triggers {
        pollSCM('H/5 * * * *')
    }
    stages {
        stage('Clean & Clone') {
            steps {
                cleanWs()
                git(branch: 'jenkinsfilr-branch',
                        credentialsId: 'lsdeploy-github',
                        url: 'https://github.com/xyz')
            }
        }
        stage('Run the shell script On-prem'){
            steps {
                sh 'cp ./ops/database-migration/on-prem/migrate.sh ./'
                git(branch: 'progress',
                        credentialsId: 'lsdeploy-github',
                        url: 'https://github.com/abc')
                 }
                configFileProvider([configFile(fileId: 'env-on-prem', targetLocation: '.env')]) {
                    sh  '''
                            bash -x migrate.sh ${FILENAME} ${DB_NAME} ${VERSION}
                    '''
                }
            }
        }
    }
}