我正在使用Jenkins进行构建和CI。
我创建了一个docker-compose文件,它需要app:PHP-APP(内置nginx),mysql,redis和cassandra节点。
为了让我的测试运行 - 我需要加载密钥空间和表。因此,在CI的docker-compose文件中,我已经命名了我的cassandra容器cassandra_ext。如果我不这样,那么docker会在它前面自我分配一个随机哈希值。
然后我会使用docker exec cassandra_ext cqlsh ...
加载密钥空间和表格。
我的测试会变绿。
问题如下:
指定了container_name的 - 我无法再安装该确切容器的另一个版本 - 因此 - 当我在另一个分支中运行另一个类似的测试时 - 它将失败,因为我的docker-composer up -d
将声明另一个容器同名的名字已经在运行。
有解决方法吗?我是否应该做其他事情以使cassandra节点的挂载保持动态(类似于redis / mysql),同时能够执行docker exec / run来加载必要的表。
更新
这是我的docker-compose.ci.yml
文件
version: '2'
services:
app:
extends:
file: docker-compose.base.yml
service: app
depends_on:
- cassandra
node:
extends:
file: docker-compose.base.yml
service: node
redis:
extends:
file: docker-compose.base.yml
service: redis
mysql:
extends:
file: docker-compose.base.yml
service: mysql
environment:
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASS}"
MYSQL_DATABASE: "${DB_NAME}"
MYSQL_USER: "${DB_USER}"
MYSQL_PASSWORD: "${DB_PASS}"
cassandra:
extends:
file: docker-compose.base.yml
service: cassandra
environment:
- CASSANDRA_RPC_ADDRESS=0.0.0.0
container_name: cassandra_ext
networks:
shared_net:
external:
name: shared_net
volumes:
mysqldata:
driver: "local"
redisdata:
driver: "local"
cassandradata:
driver: "local"
这是Jenkins文件
#!/usr/bin/env groovy
node('master') {
try {
stage('build') {
checkout scm
// Start services (Let docker-compose build containers for testing)
sh "docker network create shared_net || true"
sh "./develop.sh up -d"
// Get composer dependencies
sh "./develop.sh composer install"
// Create .env file for testing
sh 'cp .env.ci .env'
sh './develop.sh art key:generate'
sh './develop.sh art migrate'
sleep 10
sh 'docker logs --tail 10 cassandra_ext'
sh 'docker cp $(pwd)/scripts cassandra_ext:/tmp'
sh 'docker exec cassandra_ext cqlsh -f /tmp/scripts/cassandra_keyspace_travis.cql || true'
sh 'docker exec cassandra_ext cqlsh -k test -f /tmp/scripts/cassandra_travis.cql || true'
}
stage('test') {
sh "APP_ENV=testing ./develop.sh test"
}
} catch(error) {
// Need to do something about alerts
throw error
} finally {
// Spin down containers no matter what happens
sh './develop.sh down'
}
}
并且bash脚本develop.sh
来自容器:[https://github.com/shipping-docker/vessel/blob/master/docker-files/vessel]
如果我为以下内容切换docker exec
,我会收到TTY错误:
./develop.sh exec cassandra cqlsh -f /tmp/scripts/cassandra_keyspace_travis.cql
the input device is not a TTY
bash脚本有效运行:docker-compose -f docker-compose.ci.yml
并且在脚本结束时它只传递指定的额外参数:
# Else, pass-thru args to docker-compose
else
$COMPOSE "$@"
fi
答案 0 :(得分:0)
通常最好使用if(isset($_POST['id']))
{
// id to search
$id = $_POST['id'];
// Fetch Data From DataBase
$sql ="SELECT * , DATE_FORMAT(birthdate, '%d/%m/%Y') AS birthdate FROM `personal_info` WHERE `personal_id_number` = $id ORDER BY birthdate DESC";
$result = $conn -> query($sql);
if ($result -> num_rows <> 0) {
while ( $row = $result -> fetch_assoc() ) {
echo "<tr><td>" . $row["person_name"]
. "</td><td>". $row["personal_id_number"]
. "</td><td>". $row["birthday"]
. "</td><td>" . $row["adress"]
. "</td><td>" . $row["phone_number"]
. "</td><td>" . $row["email"]
. "</td><td colspan='3' class='more fit'>"
. $row["more_info"]
. "</td></tr>";
}
}
使用docker-compose
YML文件中定义的容器,而不是使用“普通”docker-compose
命令处理与它们交互所带来的额外麻烦和复杂性。通过提供添加一些额外辅助功能的docker
脚本,看起来Vessel工具可以提供帮助。
但是,你遇到了错误的路线:
develop.sh
围绕此特定错误的docker-compose似乎存在未解决的问题。问题5696识别撰写版本the input device is not a TTY
及更高版本的问题,即使是简单的命令,报告者也会指出同样的错误。 Docker成员shin-推荐的解决方法是设置:
1.19.0
因此,对于COMPOSE_INTERACTIVE_NO_CLI=1
,您可以尝试将cassandra_ext命令修改为:
Jenkinsfile
或者让它变得更加明显:
sh 'COMPOSE_INTERACTIVE_NO_CLI=1 ./develop.sh exec cassandra_ext cqlsh -f /tmp/scripts/cassandra_keyspace_travis.cql || true'
sh 'COMPOSE_INTERACTIVE_NO_CLI=1 ./develop.sh exec cassandra_ext cqlsh -k test -f /tmp/scripts/cassandra_travis.cql || true'