我需要使用一个新的数据库来构建和运行一些测试。我虽然使用了sidecar容器来托管数据库。
我已经使用google's own tutorial在kubernetes集群中使用helm安装了jenkins。 我可以启动简单的“ hello world”管道,该管道将从新的pod开始。
接下来,我尝试了Jenkin's documentation 用于将mysql实例作为Sidecar运行。
node {
checkout scm
docker.image('mysql:5').withRun('-e "MYSQL_ROOT_PASSWORD=my-secret-pw"') { c ->
docker.image('mysql:5').inside("--link ${c.id}:db") {
/* Wait until mysql service is up */
sh 'while ! mysqladmin ping -hdb --silent; do sleep 1; done'
}
docker.image('centos:7').inside("--link ${c.id}:db") {
/*
* Run some tests which require MySQL, and assume that it is
* available on the host name `db`
*/
sh 'make check'
}
}
}
首先,它抱怨找不到docker,并且互联网建议使用安装了docker的自定义jenkins从映像。
现在,如果我运行管道,它只会挂在循环中,等待数据库准备就绪。
免责声明:jenkins / docker / kubernetes的新手
答案 0 :(得分:1)
您应该使用kubectl cli(使用清单yaml文件)创建那些mysql和centos pod,svc和其他k8s对象。使用mysql服务dns在mysql数据库上运行测试。
这就是我们测试新数据库部署的方式
答案 1 :(得分:1)
最终我找到了this method。 它依赖kubernetes管道插件,并允许在共享资源的同时在代理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 1
done
"""
}
}
stage('Migrate database') {
container('jdk') {
sh './gradlew flywayMigrate -i'
}
}
stage('Run Tests') {
container('jdk') {
sh './gradlew test'
}
}
}
}