How to run sidecar container in jenkins pipeline running inside kubernetes How to run sidecar container in jenkins pipeline running inside kubernetes kubernetes kubernetes

How to run sidecar container in jenkins pipeline running inside kubernetes


Eventually I've found this method.It relies on the kubernetes pipeline plugin, and allows running multiple containers in the agent pod while sharing resources.

Note that label should not be an existing label, otherwise when you go to run, your podTemplate will be unable to find the container you made. With this method you are making a new set of containers in an entirely new pod.

def databaseUsername = 'app'def databasePassword = 'app'def databaseName = 'app'def databaseHost = '127.0.0.1'def jdbcUrl = "jdbc:mariadb://$databaseHost/$databaseName".toString()podTemplate(        label: label,        containers: [                containerTemplate(                        name: 'jdk',                        image: 'openjdk:8-jdk-alpine',                        ttyEnabled: true,                        command: 'cat',                        envVars: [                                envVar(key: 'JDBC_URL', value: jdbcUrl),                                envVar(key: 'JDBC_USERNAME', value: databaseUsername),                                envVar(key: 'JDBC_PASSWORD', value: databasePassword),                        ]                ),                containerTemplate(                        name: "mariadb",                        image: "mariadb",                        envVars: [                                envVar(key: 'MYSQL_DATABASE', value: databaseName),                                envVar(key: 'MYSQL_USER', value: databaseUsername),                                envVar(key: 'MYSQL_PASSWORD', value: databasePassword),                                envVar(key: 'MYSQL_ROOT_PASSWORD', value: databasePassword)                        ],                )        ]) {  node(label) {      stage('Checkout'){          checkout scm      }      stage('Waiting for environment to start') {          container('mariadb') {              sh """while ! mysqladmin ping --user=$databaseUsername --password=$databasePassword -h$databaseHost --port=3306 --silent; do    sleep 1done"""          }      }      stage('Migrate database') {          container('jdk') {              sh './gradlew flywayMigrate -i'          }      }      stage('Run Tests') {          container('jdk') {              sh './gradlew test'          }      }  }}


you should be using kubectl cli (using manifests yaml files)to create those mysql and centos pods,svc and other k8s objects. run tests on mysql database using mysql service dns.

This is how we have tested new database deployments