使用jenkins

时间:2018-04-16 23:27:00

标签: docker jenkins cassandra

我正在使用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

1 个答案:

答案 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'