[英]How to run sidecar container in jenkins pipeline running inside kubernetes
我需要使用新的數據庫構建和運行一些測試。 我雖然使用邊車容器來托管數據庫。
我使用google自己的教程在我的kubernetes集群中使用helm安裝了jenkins。 我可以啟動簡單的“hello world”管道,它將從一個新的pod開始。
接下來,我嘗試使用Jenkin的文檔來運行mysql實例作為邊車。
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 slave映像。
現在,如果我運行管道,它只是在循環中掛起,等待數據庫准備就緒。
免責聲明:jenkins / docker / kubernetes新手
最終我發現了這種方法 。 它依賴於kubernetes管道插件,並允許在共享資源的同時在代理窗格中運行多個容器。
請注意, label
不應該是現有標簽,否則當您開始運行時,您的podTemplate將無法找到您制作的容器。 使用此方法,您將在一個全新的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'
}
}
}
}
你應該使用kubectl cli(使用清單yaml文件)來創建那些mysql和centos pods,svc和其他k8s對象。 使用mysql服務dns在mysql數據庫上運行測試。
這就是我們測試新數據庫部署的方式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.