羽毛動作、MySQL CI実施ホットスポット

8865 ワード

話題


  • 既存のサービスおよびコントローラテストは、実際のdb環境と同じコンテナテストdbで実行されます.

  • 羽動作ciで同じ環境をテストしたい

  • mysql 5.7からグループByセクションに含まれないColumn(集約されていないカラム)を選択すると、カラムの一部に表示されるべきエラーが発生します.

  • MySQL実行時のonly fullグループbyオプションを無効にすると、この問題を解決できます.
  • 質問する

  • ローカルドックではdocker-composeのcommandオプションを使用してcnf設定
  • を有効にできます.
    services:
    	db:
    		...
        command:
              - --character-set-server=utf8mb4
              - --collation-server=utf8mb4_unicode_ci
              - --default-authentication-plugin=mysql_native_password
              - --sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

    試してみる。

    ...
    - name: Set up MySQL
            run: |
              mysql --version
    
              sudo echo -e "[mysqld]\nsql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\nskip-grant-tables\n" | sudo tee /etc/mysql/my.cnf
    
              sudo systemctl start mysql.service
    
              mysql -e 'select @@sql_mode;' -uroot -proot
              mysql -e 'CREATE DATABASE test;' -uroot -proot
              mysql -e 'SHOW DATABASES;' -uroot -proot
    ...
    羽状動作は容器環境においても同様である.cnfファイルを修正してサービスを実行しますが、次のエラーが発生しました.Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

    試してみる。


    https://github.com/actions/virtual-environments/issues/576
    「再試行」を参照
    - name: Set up MySQL
            run: |
              mysql --version
    
              sudo echo -e "[mysqld]\nsql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\nskip-grant-tables\n" | sudo tee /etc/mysql/my.cnf
    
              sudo chown -R mysql:mysql /var/lib/mysql
    
              sudo /lib/systemd/systemd-sysv-install enable mysql
              sudo systemctl enable mysql.service
    
              sudo systemctl start mysql.service
              sudo systemctl status mysql.service
    
              mysql -e 'select @@sql_mode;' -uroot -proot
              mysql -e 'CREATE DATABASE test;' -uroot -proot
              mysql -e 'SHOW DATABASES;' -uroot -proot
    しかし시도 1と同じエラーが発生しました

    解決する


  • 解決する前に、NO_AUTO_CREATE_USERもsql modeに追加される.'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'エラー発生

  • mysql 8.0.11以降はdeprecatedであり、cnfファイルsql_modeに明確な規定がある場合は、エラーが発生しないように手動で修正する必要があります.
  • https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html
    - name: Set up MySQL
            run: |
              mysql --version
              sudo systemctl start mysql.service
    
              mysql -e 'SET GLOBAL sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION";' -uroot -proot
              mysql -e 'select @@sql_mode;' -uroot -proot
              mysql -e 'CREATE DATABASE test;' -uroot -proot
              mysql -e 'SHOW DATABASES;' -uroot -proot

    ちょうど


    本当に修正されたコードは数行しかないことに気づいたのは1日かかった.
    インスタンスを構築する必要はありません.YAMLコードを使用するだけです.
    ジェンキンスの代わりに使う資料はまだ多くないので、欠点のようです.
    ホットスポット:https://github.com/volunteer-project-1/volunteer-server/issues/16

    リファレンス


    https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html
    https://github.com/actions/virtual-environments/issues/576
    https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html