Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Continuous Integration #242

Closed
21 tasks done
lens0021 opened this issue Dec 27, 2018 · 17 comments
Closed
21 tasks done

Continuous Integration #242

lens0021 opened this issue Dec 27, 2018 · 17 comments
Assignees
Labels
ci Continuous Integration

Comments

@lens0021
Copy link
Member

lens0021 commented Dec 27, 2018

Branch: travis-ci

도커화가 마무리되어서, 이제 CI를 쓸 수 있다. 기본적인 테스트 자동화가 가능할지 검토해보자.

TODOs

  • Build Stages에 이름짓기 (예제)- [x] 로컬 데이터베이스 대상으로 미디어위키 띄우기
  • 실제 데이터베이스+S3 대상으로 미디어위키 띄우기?
  • 띄워진 미디어위키 테스트할 방법 찾기?
  • matrix 구성하기?
  • loop 너무 오래 돌면 멈추게 하기
  • 리뷰 및 머지

스크립트

  • Docker
    • build
    • push?
    • swarm init
    • stack deploy
  • Containers 뜨는 동안 기다리기
  • 데이터베이스 준비하기
  • Mediawiki
    • 설치하기
      • 데이터베이스 연결하기

체크

  • Linting
    • php -l
    • php-parallel-lint
  • Code style
    • editorconfig?
    • phpcs
  • Static analysis?
  • 위키 상태
    • curl
    • Unit tests?
      • PHPUnit - 일부 실행
      • QUnit - 하지 말까 싶음 -낙엽

Activity

  • Hyeon Kim added this card to Backlog - Dec 24 at 12:38 PM
@lens0021
Copy link
Member Author

lens0021 commented Dec 29, 2018

위키미디어 미디어위키 리포지토리에 .travis.yml가 있어서 참고하면 되겠습니다.

@lens0021 lens0021 transferred this issue from femiwiki/femiwiki Dec 29, 2018
@lens0021
Copy link
Member Author

위 링크에 써있듯이 위키미디어에서는 Jenkins를 (아마도 주로) 쓴다고 하고, 주소는 https://integration.wikimedia.org/ci/ 인데, jenkinsfile 같은 건 어디서 보는걸까요 @.@

@lens0021
Copy link
Member Author

lens0021 commented Jan 6, 2019

phpcs가 잘 안돼서 살펴보니까 저희가 미디어위키를 릴리즈된 tar.gz버전을 받아서 .phpcs.xml 같은 게 없어서 그랬었네요...

@lens0021
Copy link
Member Author

lens0021 commented Jan 6, 2019

femiwiki/database/database.yml로 DB를 띄우거나 travis-ci에서 service로 mysql을 띄우면 호스트머신의 localhost:3306을 사용해야 되는데 femiwiki/mediawiki/docker-compose.yml의 fastcgi에서 localhost에 접근하려면 기본 네트워크로 안 되고 추가적인 조작이 필요합니다... 같은 네트워크가 되도록 묶고 http://mysql:3306으로 접근하게 하거나... 스택의 네트워크를 브릿지?? 하거나??

@lens0021 lens0021 self-assigned this Jan 6, 2019
@lens0021
Copy link
Member Author

lens0021 commented Jan 6, 2019

editorconfig도 travis-ci에서 체크할 수(혹은 체크해야 할 필요성이) 있나요? @simnalamburt

@lens0021
Copy link
Member Author

lens0021 commented Jan 6, 2019

femiwiki/database/database.yml로 DB를 띄우거나 travis-ci에서 service로 mysql을 띄우면 호스트머신의 localhost:3306이 개방되는데 femiwiki/mediawiki/docker-compose.yml의 fastcgi에서 localhost에 접근하려면 기본 네트워크로 안 되고 추가적인 조작이 필요합니다...

맥 혹은 윈도우용 도커에서는 콘테이너 안에서 host.docker.internal라는 DNS를 이용해서 호스트머신의 DB에 접속할 수 있다고 하는데, 리눅스에서는 아직 그 기능이 없다는 것 같고(https://github.com/docker/for-linux/issues/264), 제 우분투에서 해보니까 진짜로 안 됩니다. travis가 지금 설정에서는 우분투에서 돌아가는데 osx으로 바꿔서 한번 시도해보고 다시 코멘트 달겠습니다

@lens0021
Copy link
Member Author

lens0021 commented Jan 6, 2019

osx으로 바꿔서 한번 시도해보고 다시 코멘트 달겠습니다

$ travis lint
Warnings for .travis.yml:
[x] in git section: unexpected key quiet, dropping
[x] in os section: dropping osx, does not support php

Update

다음과 같이 처리했습니다.

DOCKER_HOST=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')
sed -ri "s/mysqlhostname/${DOCKER_HOST}/" configs/env
sed -ri "s/DB_HOSTNAME|MEMCACHED_HOSTNAME/${DOCKER_HOST}/" configs/secret.php

https://nickjanetakis.com/blog/docker-tip-65-get-your-docker-hosts-ip-address-from-in-a-container

@lens0021
Copy link
Member Author

lens0021 commented Jan 7, 2019

travis에서 기본으로 php랑 composer 있대서 막 갖다썼는데 지원하는 버전들이 낮아서 최신 미디어위키 lint나 기타등등이랑은 안 맞는 것 같고 도커 컨테이너 안에서 composer를 직접 세팅해서 써야겠습니다 ㅇ<-<

Update

따로 버전을 안적어서 그런거고 적으면 되겠습니다.

@lens0021
Copy link
Member Author

lens0021 commented Jan 7, 2019

Containers 뜨는 동안 기다리기 - #232 ? 근데 스택이 건강한지 체크하는 커맨드나 건강해질 때까지 기다리게 하는 방법이 있나?
혹은 curl 같은 걸 계속 시도하면서 마냥 기다리기?

본문에 위와 같이 남겼었는데 어떻게든 하면 되지 않을까 싶기도 합니다.

https://stackoverflow.com/a/24560463

@simnalamburt
Copy link
Member

👍

@lens0021
Copy link
Member Author

lens0021 commented Jan 7, 2019

https://travis-ci.org/femiwiki/mediawiki/builds/476319713#L2872

mediawiki_fastcgi.1.xtsfmt5w7dee@travis-job-997869af-02b4-4605-847d-06e80e0716a6 | 데이터베이스를 설정하는 중
mediawiki_fastcgi.1.xtsfmt5w7dee@travis-job-997869af-02b4-4605-847d-06e80e0716a6 | Cannot access the database: Connection refused (172.17.0.1). 호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.

뭐가 문제람 🤔

@lens0021
Copy link
Member Author

lens0021 commented Jan 7, 2019

로컬에서 테스트를 해봤는데 데이터베이스가 아예 안 떠있을 땐

Cannot access the database: Connection refused (************). 호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.

식으로 뜨고 계정이나 비밀번호가 틀렸을 땐

Cannot access the database: Access denied for user 'rootaaa'@'10.255.0.2' (using password: YES) (************). 호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.

라고 나옵니다. 그래서 travis-ci의 도커 컨테이너 안에서는 위에서 설명한 방법((ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+'))으로는 호스트의 데이터베이스를 못 보는 것 같습니다.

@lens0021
Copy link
Member Author

lens0021 commented Jan 7, 2019

travis에서 제공하는 mysql이 5.5~5.7인 문제도 있으니까 mysql 그냥 도커로 띄우고 네트워크를 어떻게 하는 걸로 하겠습니ㅏ... 😢

@lens0021
Copy link
Member Author

lens0021 commented Jan 8, 2019

지금 스크립트에 도커 빌드가 들어있어서 괜히 오래걸리는데 잡을 나누기는 좀 그렇고 그냥 일단 빼고 표시해뒀다가 나중에 다시 추가할게요

@lens0021
Copy link
Member Author

lens0021 commented Jan 8, 2019

PHPUnit을 써먹으려고 제 노트북에 있는 도커 컨테이너에서 띄운 페미위키에서 돌려보면 97% 정도 진행됐을 때

Fatal error: Cannot use 'object' as class name as it is reserved in /var/www/html/vendor/phpunit/phpunit-mock-objects/src/Generator.php(264) : eval()'d code on line 1

라면서 종료되고 자세한 결과를 안 보여줍니다.
mediawiki 이미지를 사용해서 띄운 미디어위키에서 해도 마찬가지 에러로 종료됩니다.

@lens0021
Copy link
Member Author

lens0021 commented Jan 8, 2019

정확히 말하긴 어렵지만 LocalSettings.php의 확장기능, 언어, DB 설정 등등이 매우 기본적인 상태일 때만 PHPUnit의 통과가 가능한 것 같습니다. 예를 들어 php phpunit.php --group Addshore는 다음 결과를 출력했지만, LocalSettings.php의 $wgLanguageCode = 'ko';를 주석처리하니까 통과되었습니다. (해당 코드를 보면 다중언어 지원없이 'Category:CategoryName'라고 적힌 것을 볼 수 있습니다)

1) CategoryMembershipChangeTest::testChangeAddedNoRev
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'Category:CategoryName'
+'분류:CategoryName'

/srv/femiwiki.com/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php:81
/srv/femiwiki.com/tests/phpunit/MediaWikiTestCase.php:421
/srv/femiwiki.com/maintenance/doMaintenance.php:94

그래서 PHPUnit을 쓰려면 페미위키 설정에서 통과가 가능한 테스트가 어떤 것인지를 미리 추려서 해당 테스트만 돌리는 방법으로 접근해야 할 것 같습니다.

@lens0021 lens0021 mentioned this issue Jan 11, 2019
@simnalamburt simnalamburt pinned this issue Feb 1, 2019
@simnalamburt
Copy link
Member

Closed by #249

@simnalamburt simnalamburt unpinned this issue Feb 2, 2019
@lens0021 lens0021 added the ci Continuous Integration label Jun 1, 2021
@lens0021 lens0021 moved this to Done in femiwiki.com Jan 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci Continuous Integration
Projects
Status: Done
Development

No branches or pull requests

2 participants