понедельник, 18 марта 2019 г.

Jenkinsfile multibranch pipeline and shell / bash

Вот я намучался. Не знаю по какой причине, но я вполучил не рабочий Jenkinsfile. Причем, эта копия с других проектов где это работает годами! Капец.
Мне надо было сделать так, что бы выставлялись переменные окружения в зависимости от имени бранча. Если master то выставить пару переменных для master, если release-* то другие.
И раньше вот эта конструкция работала:

pipeline {
    environment {
        JAVA_HOME = "/usr/java/jdk-11.0.2"
        COMMIT7 = sh(
                script: '(echo ${GIT_COMMIT}| tail -c 8)',
                returnStdout: true
        ).trim()
        MY_ENV = sh(
                script: 'if [[ $BRANCH_NAME =~ "release-" ]]; then echo prod; else echo qa; fi',
                returnStdout: true
        ).trim()
        MY_VERSION = sh(
                script: 'echo "${BRANCH_NAME}.${BUILD_ID}"',
                returnStdout: true
        ).trim()
    }
.....

и так далее.

А вот сегодня я вижу ошибку от Bourne shell что хрень это ваша [[ конструкция.

Я понимаю, что bourne shell не понимает ни хрена [[ и =~. 
переписал на использование bash:

pipeline {
    environment {
        JAVA_HOME = "/usr/java/jdk-11.0.2"
        MY_ENV = sh(returnStdout: true, script:
                '''#!/bin/bash
                   if [[ $BRANCH_NAME =~ "release-" ]]; then echo prod; else echo qa; fi
                '''
        ).trim()
        MY_VERSION = sh(returnStdout: true, script:
                '''#!/bin/bash
                   if [[ $BRANCH_NAME =~ "release-" ]]; then echo "${BRANCH_NAME}.${BUILD_ID}"; else echo "${BRANCH_NAME}.${BUILD_ID}-SNAPSHOT"; fi
                '''
        ).trim()
    }

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