![](/img/trans.png)
[英]Gitlab Ci Pipeline issue: Nodejs can't connect to Mysql Database
[英]Gitlab CI + DinD + MySQL services permission issue
我創建了兩個 GitLab 作業:
我使用以下 gitlab-ci-multi-runner 配置:
concurrent = 1
check_interval = 0
[[runners]]
name = "name-ci"
url = "https://uri/ci"
token = "token"
executor = "docker"
[runners.docker]
tls_verify = false
image = "docker:latest"
privileged = true
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
測試單元工作正常,但 Sonar 工作失敗並顯示以下消息:
service runner-f66e3b66-project-227-concurrent-0-docker-wait-for-service did timeout
2017-07-05T16:13:18.543802416Z mount: mounting none on /sys/kernel/security failed: Permission denied
2017-07-05T16:13:18.543846406Z Could not mount /sys/kernel/security.
2017-07-05T16:13:18.543855189Z AppArmor detection and --privileged mode might break.
2017-07-05T16:13:18.543861712Z mount: mounting none on /tmp failed: Permission denied
當我將 'runner.docker' 的配置參數 'privileged' 更改為 false 時,Sonar 工作正常但測試單元失敗:
service runner-f66e3b66-project-227-concurrent-0-mysql-wait-for-service did timeout
2017-07-05T15:08:49.178114891Z
2017-07-05T15:08:49.178257497Z ERROR: mysqld failed while attempting to check config
2017-07-05T15:08:49.178266378Z command was: "mysqld --verbose --help"
2017-07-05T15:08:49.178271850Z
2017-07-05T15:08:49.178276837Z mysqld: error while loading shared libraries: libpthread.so.0: cannot open shared object file: Permission denied
參數“特權”必須為真才能在 docker 中使用 docker。 但我不明白為什么它會破壞像 MySQL 這樣的服務的權限。
這是我的 gitlab-ci 文件:
stage :
- test-unit
- analyse
.php_job_template: &php_job_template
image: custom_docker_image
before_script:
- eval $(ssh-agent -s) && ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
services :
- mysql
variables:
MYSQL_DATABASE: blabla
MYSQL_USER: blabla
MYSQL_PASSWORD: blabla
MYSQL_ROOT_PASSWORD: blabla
test_phpunit_dev:
<<: *php_job_template
stage: test-unit
script:
- mysql -h mysql -u blabla -pblabla <<< "SET GLOBAL sql_mode = '';"
- php composer.phar install -q
- php vendor/bin/phpunit -c tests/phpunit.xml
sonar:
stage: analyse
image: docker:1.12.6
services:
- docker:dind
script:
- docker run --rm -v `pwd`:/build -w /build letsdeal/sonar-scanner:2.7 scan -e
我該如何解決?
例如,為什么不使用ciricihq/gitlab-sonar-scanner
? 它不需要使用 dind 或特權模式
我遇到了同樣的問題,並且能夠通過刪除 MySQL(因為我的 CI 服務器上不需要它)並禁用AppArmor來解決它。 在 Ubuntu 上,您可以運行:
# Remove Mysql
sudo apt-get remove mysql-server
# Disable AppArmor for MySQL
sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
來源: https ://www.cyberciti.biz/faq/ubuntu-linux-howto-disable-apparmor-commands/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.