Home > Software design >  Bitbucket pipeline import mysql schema
Bitbucket pipeline import mysql schema

Time:05-13

I'm trying to import database schema to mysql service through following statment

mysql -h 127.0.0.1 -u $DB_USERNAME -p$DB_PASSWORD $DB_DATABASE < DB_Schema.sql

and it return mysql: not found. I have even tried the following command

docker exec -i mysql mysql -h 127.0.0.1 -u $DB_USERNAME -p$DB_PASSWORD $DB_DATABASE < DB_Schema.sql

Even though received error docker exec -i mysql mysql --user=$DB_USERNAME --password=$DB_PASSWORD 5i < DB_Schema.sql Error: No such container: mysql

What would be the best way to use mysql so that I can import a stance of DB into it for testing purpose and how?

enter image description here

Please find the .yml file below.

# This is a sample build configuration for PHP.
# Check our guides at https://confluence.atlassian.com/x/e8YWN for more examples.
# Only use spaces to indent your .yml configuration.
# -----

# Specify a docker image from Docker Hub as your build environment.
# All of your pipeline scripts will be executed within this docker image.

image: php:8.0-fpm-alpine

# All of your Pipelines will be defined in the `pipelines` section.
# You can have any number of Pipelines, but they must all have unique
# names. The default Pipeline is simply named `default`.

pipelines:
  default:
  # Each Pipeline consists of one or more steps which each execute
  # sequentially in separate docker containers.
  # name: optional name for this step
  # script: the commands you wish to execute in this step, in order
    - parallel:
      - step:
          name: Installing Dependancies and Composer
          caches:
            - composer
          script:
            # Your Pipeline automatically contains a copy of your code in its working
            # directory; however, the docker image may not be preconfigured with all
            # of the PHP/Laravel extensions your project requires. You may need to install
            # them yourself, as shown below.
            - apt-get update && apt-get install -qy git curl libmcrypt-dev unzip libzip-dev libpng-dev zip git gnupg gnupg2 php-mysql
            - docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg --with-webp && \
            - docker-php-ext-install gd && \
            - docker-php-ext-install exif && \
            - docker-php-ext-install zip && \
            - docker-php-ext-install pdo pdo_mysql
            - rm -rf ./vendor
            - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
            - composer install --ignore-platform-reqs
            - composer dump-autoload
            # Here we create link between the .env.pipelines file and the .env file
            # so that our database can retreieve all the variables inside .env.pipelines
            - ln -f -s .env.pipelines .env
          artifacts:
            - vendor/**

      - step:
          name: Installing and Running npm
          image: node:16
          caches:
            - node
          script:
            - npm install -g grunt-cli
            - npm install
            - npm run dev
          artifacts:
            - node_modules/**

    - step:
        name: Running Test
        deployment: local
        script:
          # Start up the php server so that we can test against it
          - php artisan serve &
          # # Give the server some time to start
          - sleep 5
          # - php artisan migrate
          - docker ps
          - docker container ls
          - mysql -h 127.0.0.1 -u $DB_USERNAME -p$DB_PASSWORD $DB_DATABASE < DB_Schema.sql
          # - docker exec -i mysql mysql -h 127.0.0.1 -u $DB_USERNAME -p$DB_PASSWORD -e "SHOW DATABASES"
          - php artisan optimize
          - php artisan test
        services:
          - mysql
          - docker
          
# You might want to create and access a service (like a database) as part
# of your Pipeline workflow. You can do so by defining it as a service here.
definitions:
  services:
    mysql:
      image: mysql:latest
      environment:
        MYSQL_DATABASE: $DB_DATABASE
        MYSQL_USER: $DB_USERNAME
        MYSQL_PASSWORD: $DB_PASSWORD
        MYSQL_ROOT_PASSWORD: $DB_PASSWORD
        SERVICE_TAGS: mysql
        SERVICE_NAME: mysql

CodePudding user response:

You cannot install/update/change you main image in the first step for them to be there in the last step. Make your custom Docker image with all those installations, which will make it faster to run the pipeline and will let you use other tools you need in your pipeline.

CodePudding user response:

I prefer to use the "mysql" client outside Docker and have it reach into the Docker container based on the port mapping set up. Then, conceptually, it is like reading to a "mysqld" server on a separate "server".

LOAD DATA INFILE and INSERT, including use of mysql ... < dump.sql works fine.

  • Related