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

TEST: Use a docker image #694

Closed
wants to merge 1 commit into from
Closed

Conversation

ing-eoking
Copy link
Collaborator

CI 테스트를 도커를 활용하여 build 시간을 단축시킵니다.
Dockerfile을 통한 테스트 진행을 위해 2개의 기존 파일을 변경했습니다.

  • Dockerfile : 패키지 설치시 test 진행에 필요한 net-tools, cpan, perl-core 설치
  • 67번 test : 도커 컨테이너 구동 시 root 권한에서 구동이 가능하도록 서버 실행에 -u 옵션 추가

@jhpark816
Copy link
Collaborator

CI 테스트의 build 시간을 단축하는 다른 방안이 있을 것 같은 데, 그 방안을 선택하지 않은 이유는 무엇인가요?

Copy link
Collaborator

@jhpark816 jhpark816 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

리뷰 완료

t/issue_67.t Outdated
@@ -38,7 +38,7 @@ sub validate_port {
sub run_server {
my ($args) = @_;

$args .= " -E $builddir/.libs/default_engine.so";
$args .= " -E $builddir/.libs/default_engine.so -u root";
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기 변경은 왜 필요한가요?

Copy link
Collaborator Author

@ing-eoking ing-eoking Oct 11, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 부분은 수정되었습니다.

docker run을 통해 컨테이너를 실행할 경우 root로 실행됩니다.

해당 경우에서 memcached를 구동 시 -u root 옵션을 주어야 하나
67번 테스트의 경우 구동에 대하여 생성된 port 파일을 확인하는 테스트로
서버를 구동할 때에 run_server 함수를 통해 구동되며, 이때에
default_engine 이외에 인자를 주고 있지 않습니다.

다른 테스트(MemcachedTest.pm의 new_memcached 함수)는
userid 검사를 통해 자동으로 -u 옵션을 주고 있습니다.

@jhpark816
Copy link
Collaborator

@ing-eoking
아래 코멘트도 확인 바랍니다.
#694 (comment)

@ing-eoking
Copy link
Collaborator Author

CI 테스트의 build 시간을 단축하는 다른 방안이 있을 것 같은 데, 그 방안을 선택하지 않은 이유는 무엇인가요?

이전에 CI 테스트의 build 시간 단축을 위해 시도했던 방안은 아래와 같습니다.

  1. 필요 의존성(libevent, zookeeper)만 설치 후 Test
  • 해당 설치를 위해 불필요하게 스크립트가 길어졌습니다.
  • 상위 arcus repository가 libevent를 관리하기에 build.sh를 사용하는 쪽이 옳다고 생각했습니다.
  • 의존성을 모두 설치하는 Dockerfile 이미지가 있기에 간편합니다.
  1. 캐싱
  • 이전 CI 테스트는 GitHub Action vm 내의 특정 경로를 캐싱합니다. 의존성이 변경될 경우 키를 이에 맞게 설정해야 하며,
    처음부터 다시 빌드해야 합니다.
  • docker의 캐싱 정책에 맞게 캐싱이 이루어지기에 변경 지점 이후부터 빌드됩니다.

Copy link
Collaborator

@namsic namsic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

모든 빌드 및 테스트 과정이 docker 환경에서 동작하는 것에 대해 조금 회의적이기는 합니다.

아래와 같은 환경에서 docker를 사용하는 것은 유용할 것으로 생각합니다.

  • master에 릴리즈가 되거나 develop에 PR이 merge 되었을 때, 자동으로 jam2in docker hub에 push
  • 클라이언트 테스트를 위해, 캐시 서버를 docker container로 구동

Comment on lines +16 to +19
- name: Set Docker Buildx
uses: docker/[email protected]
- name: Build Arcus Server Image
uses: docker/[email protected]
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

buildx는 multi-platform build를 위함인가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

해당 부분은 캐싱을 위함입니다.
현재 올린 CI 테스트는 드라이버가 docker가 아닌 buildkit docker container에서 빌드가 이루어집니다.
단순 docker의 경우 Caching 경로 지정이 불가하여 GitHub Action에서 활용이 불가능합니다.

@ing-eoking
Copy link
Collaborator Author

해당 PR은 종료.

  • jam2in/arcus-works#445

위의 이슈를 마치고, 이후에 CI 테스트 빌드 최적화를 진행하겠습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants