Liquibase - 기존 DB를 이용해서 초기(initial) ChangeSet 만들기

DevOps|2018. 4. 5. 18:12

Generating Change Logs

  • Example
liquibase --driver=oracle.jdbc.OracleDriver \
      --classpath=\path\to\classes:jdbcdriver.jar \
      --changeLogFile=com/example/db.changelog.xml \
      --url="jdbc:oracle:thin:@localhost:1521:XE" \
      --username=scott \
      --password=tiger \
      generateChangeLog
  • default options
liquibase --driver=org.postgresql.Driver --classpath=C:/Users/daniel/.IntelliJIdea2017.3/config/jdbc-drivers/PostgreSQL/42.2.1/postgresql-42.2.1.jar --changeLogFile=db.changelog.xml --url="jdbc:postgresql://localhost:5432/postgres" --username=postgres --password=postgres generateChangeLog
liquibase --driver=org.postgresql.Driver --classpath=C:/Users/daniel/.IntelliJIdea2017.3/config/jdbc-drivers/PostgreSQL/42.2.1/postgresql-42.2.1.jar --changeLogFile=db.data.changelog.xml --url="jdbc:postgresql://localhost:5432/postgres" --username=postgres --password=postgres --diffTypes="data" generateChangeLog
  • all(default + include data)
liquibase --driver=org.postgresql.Driver --classpath=C:/Users/daniel/.IntelliJIdea2017.3/config/jdbc-drivers/PostgreSQL/42.2.1/postgresql-42.2.1.jar --changeLogFile=db.all.changelog.xml --url="jdbc:postgresql://localhost:5432/postgres" --username=postgres --password=postgres --diffTypes="tables, views, columns, indexes, foreignkeys, primarykeys, uniqueconstraints, data" generateChangeLog
  • 데이터베이스 업데이트를 위해 Liquibase가 사용하는 SQL 파일 생성
liquibase --driver=org.postgresql.Driver --classpath=C:/Users/daniel/.IntelliJIdea2017.3/config/jdbc-drivers/PostgreSQL/42.2.1/postgresql-42.2.1.jar --changeLogFile=db.all.changelog.xml --url="jdbc:postgresql://localhost:5432/postgres" --username=postgres --password=postgres --diffTypes="tables, views, columns, indexes, foreignkeys, primarykeys, uniqueconstraints, data" updateSQL  > updateSQL.sql
  • 생성된 ChangeSet은 여러 개로 나뉘어져 있는데, 하나의 ChangeSet으로 병합하는게 좋다.
    • 변경 로그를 하나만 남기기 위해서.
    • 가독성



EOF

댓글()

Vagrant Share를 이용하여 외부에서 사내의 웹 서비스에 접속

DevOps|2017. 9. 21. 07:52

외부의 고객에게 현재 개발 중인 웹 서비스 상태를 보여 줄 일이 가끔 있습니다.
이럴 때 내 랩탑의 Vagrant Box를 사외에서 접근하도록 할 수 있다면 꽤 편리할 겁니다.

실제로 Vagrant Share라는 기능을 이용하면 이렇게 할 수 있습니다. 꽤 간편하죠.

한 번 해 봅시다.

우선 아래와 같은 Vagrantfile과 provision.sh 파일을 만듭니다.

Vagrantfile

Vagrant.configure(2) do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.provision "shell", path: "provision.sh"
  config.vm.network "forwarded_port", guest: 80, host: 8080, id: "nginx"
end

provision.sh

apt-get -y update
apt-get -y install nginx
service nginx start

우분투 OS에 nginx를 설치하고 호스트의 8080 포트로 웹 서비스에 접근할 수 있도록 설정했습니다.

이제 vagrant up 명령으로 박스를 실행합니다.

C:\workspace\vagrant-share_ngrok>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'hashicorp/precise32' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'hashicorp/precise32'
    default: URL: https://atlas.hashicorp.com/hashicorp/precise32
==> default: Adding box 'hashicorp/precise32' (v1.0.0) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/hashicorp/boxes/precise32/versions/1.0.0/providers/virtualbox.box
==> default: Box download is resuming from prior download progress
    default: Progress: 100% (Rate: 561k/s, Estimated time remaining: --:--:--)
==> default: Successfully added box 'hashicorp/precise32' (v1.0.0) for 'virtualbox'!
==> default: Importing base box 'hashicorp/precise32'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'hashicorp/precise32' is up to date...
==> default: Setting the name of the VM: vagrant-share_ngrok_default_1505748939539_53687
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 80 (guest) => 8080 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    ......
    ......
    ......
==> default: Setting up nginx (1.1.19-1ubuntu0.8) ...
==> default: Processing triggers for libc-bin ...
==> default: ldconfig deferred processing now taking place
==> default: Starting nginx:
==> default: nginx.

C:\workspace\vagrant-share_ngrok>

실행이 완료되면 아래 페이지에서 ngrok를 다운로드 합니다.

Download ngrok

다운로드 받은 파일의 압축을 해제하면 나오는 실행 파일을 적당한 곳에 풀어주고 해당 폴더를 시스템 PATH 에 추가합니다.
Vagrant Share가 실행될 때 ngrok 실행 파일을 찾을 수 있어야 하기 때문에 필요한 작업입니다.

ngrok을 이용하면 Vagrant와 관계 없이 개발용 랩탑에서 실행되는 웹서비스 등을 퍼블릭 망에서 접근이 가능하게 할 수 있습니다.
8080 포트를 열고 싶으면 간단히 ngrok http 8080 을 실행하면 됩니다. 나머지는 ngrok 을 실행하면 나오면 도움말을 참고하세요.

이제 새 명령 프롬프트를 띄우고 vagrant share 명령을 실행합니다.

C:\workspace\vagrant-share_ngrok>vagrant share
Vagrant Share now defaults to using the `ngrok` driver.
The `classic` driver has been deprecated.

For more information about the `ngrok` driver, please
refer to the documentation:

  https://www.vagrantup.com/docs/share/
==> default: Detecting network information for machine...
    default: Local machine address: 127.0.0.1
    default:
    default: Note: With the local address (127.0.0.1), Vagrant Share can only
    default: share any ports you have forwarded. Assign an IP or address to your
    default: machine to expose all TCP ports. Consult the documentation
    default: for your provider ('virtualbox') for more information.
    default:
    default: Local HTTP port: 8080
    default: Local HTTPS port: disabled
    default: Port: 8080
    default: Port: 2222
==> default: Creating Vagrant Share session...
==> default: HTTP URL: http://030a7496.ngrok.io
==> default:

Vagrant가 박스에서 실행 중인 웹 서비스의 포트를 찾아서 이를 외부에 열어 줍니다.
이제 실행 후 출력된 주소(위의 경우는 http://030a7496.ngrok.io)를 고객에게 알려주기만 하면 됩니다.

미리 확인해 보려면 스마트폰(LTE)으로 접속해 보면 되겠죠.


EOF

댓글()

Vagrant - CoreOS에 vagrant ssh 접속 시 인증 실패

DevOps|2017. 8. 13. 11:06

Vagrant에 CoreOS를 설치하고 ssh 접속을 시도 했을 때 인증이 안되는 경우가 있습니다.

    $ vagrant ssh
    Password:
    Password:
    Password:
    vagrant@127.0.0.1's password:
    vagrant@127.0.0.1's password:
    Authentication failed.

저의 경우는 alpha 채널에서 1492.1.0 버전을 받아서 설치했었습니다.

CoreOS는 기본 계정이 vagrant가 아니라 core 더군요. 그리고 key 방식 인증만 지원하고 passowrd 방식은 지원 안합니다. 이런 경우 Vagrant의 insecure key를 이용하면 됩니다.

    $ ssh core@localhost -p 2222 -i $VAGRANT_HOME/insecure_private_key

$VAGRANT_HOME 은 윈도(windows)의 경우 C:\Users\[사용자ID]\.vagrant.d 폴더입니다. 명령 프롬프트에서 cd %USERPROFILE%\.vagrant.d 명령으로 이동할 수 있습니다.

혹은 Vagrantfile에서 아래와 같이 ssh username을 core로 변경한 후 VM을 reload 하면 vagrant ssh 명령으로 접속이 가능합니다.

    config.ssh.username = "core"



EOF

댓글()

Vagrant - 기본+

DevOps|2017. 6. 8. 19:12

Vagrant - 기본의 내용을 보충한다.

포트 포워딩(PORT FORWARDING)

호스트 머신의 포트를 통해서 게스트 머신의 특정 포트에 접속, 네트워크 트래픽을 게스트 머신으로 보내는 방법.

게스트 머신의 아파치에 접근하기 위해서는 아래와 같이 Vagrantfile을 편집한다. guest 속성의 80이 가상머신의 포트, host속성의 4567이 호스트의 포트다.
즉 아래와 같이 설정하면 호스트에서 http://localhost:4567로 접속하면 가상머신의 80 포트에 접속해서 아파치 화면을 볼 수 있다.

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  config.vm.network :forwarded_port, guest: 80, host: 4567
end

포트를 변경한 후에는 vagrant reload 명령으로 가상머신을 재시작 한다.

가상머신의 포트 포워딩 설정이 기억나지 않을 때는 VirtualBox를 실행하고 해당 가상머신의 설정 → 네트워크 → 어댑터 1 → 포트 포워딩을 클릭하여 확인할 수 있다.

MEMORY, CPU 크기 설정

가상머신의 memory나 cpu의 크기를 변경하려면 아래와 같이 설정을 조정할 수 있다. 아래는 메모리를 2GB로, CPU를 2개로 조정한 예이다.

config.vm.provider :virtualbox do |vb|
    vb.memory = 2048
    vb.cpus = 2
end

스냅샷(SNAPSHOT) 생성/복구

가상머신의 스냅샷을 생성하려면 스냅샷 이름과 함께 vagrant snapshot save 명령을 사용한다. 아래의 예는 first_snapshot이라는 이름으로 스냅샷을 생성하고 있다.

vagrant snapshot save first_snapshot

가상머신의 상태를 복구하려면 restore 명령을 사용한다. 아래는 first_snapshot이라는 이름의 스냅샷을 이용해 가상머신의 상태를 되돌리고 있다.

vagrant snapshot restore first_snapshot

생성한 스냅샷을 이용해서 상태를 복구하려면 스냅샷의 이름을 알고 있어야 한다. 스냅샷 목록을 통해 지금까지 생성된 스냅샷의 이름을 확인할 수 있다.

$ vagrant snapshot list
first_snapshot

BOOT TIMEOUT 옵션

가상머신의 부트 시간이 너무 오래 걸려서 실패하는 경우, boot_timeout 옵션을 조정해서 시간을 늘릴 수 있다.

config.vm.boot_timeout = 600

초 단위로 지정하며 기본 값은 300이다(5분).


EOF

댓글()

Vagrant - 기본

DevOps|2017. 6. 2. 19:10

윈도(Windows)를 주로 사용하지만 리눅스 환경이 필요한 경우가 많아서 Vagrant를 그간 꾸준히 사용해 왔다. 정리를 위해 Vagrant에 대한 개요와 기본 사용법을 정리해 본다.

설치

우선 Vagrant와 VirtualBox의 설치가 필요하다. 아래 주소에서 내려받아서 설치한다.

Vagrantfile 생성

vagrant init 명령을 실행하면 현재 폴더에 Vagrantfile을 생성한다. 아래와 같이 Box의 이름을 추가하면 해당 박스를 사용하는 Vagrantfile을 생성한다.

vagrant init bento/centos-7.3

이렇게 생성한 Vagrantfile에는 다량의 주석이 포함되어 있어서 이 주석만 잘 읽어봐도 기본적인 설정 방법을 아는데 무리가 없다.

Box 검색

원하는 리눅스 배포본과 버전의 Box를 아래 주소에서 검색할 수 있다.

각 리눅스 배포본 제공자의 오피셜 박스를 사용하는게 안전하다. 다만 CentOS의 경우는 Bento 프로젝트에서 제공하는 박스도 많이 사용하는 것 같다.

Vagrant machine 생성

vagrant up

위 명령을 Vagrantfile이 있는 폴더에서 실행하면 가상 머신이 생성된다.

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'bento/centos-7.3'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'bento/centos-7.3' is up to date...
==> default: Setting the name of the VM: Documents_default_1496384515554_86818
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => C:/Users/daniel/vagrant-test

Vagrant machine에 SSH로 접속

vagrant ssh

위 명령을 Vagrantfile이 있는 폴더에서 실행하면 vagrant 사용자로 가상 머신에 SSH로 접속이 된다.
PuTTY 등의 SSH 클라이언트로 접속하려면 127.0.0.1:2222에 vagrant로 접속하면 된다. 암호 또한 vagrant다. 2222 포트로 접속하는 이유는 기본으로 가상 머신의 22 포트와 호스트 머신의 2222 포트가 port forwarding 방식으로 연결되어 있기 때문이다. 이미 다른 가상 머신이 2222 포트를 사용 중이면 다른 포트가 자동으로 할당되며, 이는 실행 로그를 통해 알아내면 된다.

Vagrant machine을 다루는 기본 명령

삭제(terminate)

vagrant destroy

정지(shutdown, poweroff)

vagrant halt

가상 머신을 끈다.

재시작(reboot, halt and up)

vagrant reload

가상 머신을 재시작한다. 정지 후 시작하는 것과 동일하다.

일시 중지(suspending)

vagrant suspend

현재의 동작 상태를 저장한 상태로 정지한다. 다시 시작하면 부팅 과정 없이 저장한 지점에서 바로 시작한다.

다시 시작(resume)

vagrant resume

일시 중지 상태의 가상 머신을 이전 지점에서 다시 시작한다.

상태 확인(status)

vagrant status

가상 머신의 상태를 확인한다. 정지 상태면 poweroff로 표시되고 정상 동작 중이면 running으로 표시된다.


EOF

댓글()

Vagrant 공유 폴더 문제(mount.vboxsf 관련) - vagrant-vbguest 플러그인

DevOps|2017. 5. 29. 19:43

Vagrant를 이용해 apache brooklyn을 학습하던 중에 갑자기 brooklyn 서버가 동작을 안하는 문제가 생겼습니다. 최초로 VM을 생성했을 때는 마운트에 문제가 없었는데 재부팅을 하면 문제가 생깁니다.

이런저런 방법으로 추적해 봤더니 결국 Vagrant 혹은 VirtualBox에서 발생한 오류 때문이더군요.

brooklyn 서버의 /vagrant로 마운트되는 VirtualBox 공유 폴더가 마운트 안되는 문제인데, 아래와 같은 오류 메시지가 출력됩니다.

==> brooklyn: Mounting shared folders...
    brooklyn: /vagrant => G:/workspace/apache-brooklyn-0.11.0-vagrant
Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant

The error output from the command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

구글링을 해보니, VirtualBox Guest Additions 설치에 문제가 있어서 그런 것 같습니다. 여러 가지 시도를 해봤는데 결국 vagrant-vbguest 플러그인을 설치해서 해결했습니다.

vagrant-vbguest 플러그인은 guest machine과 VirtualBox host의 Guest Additions 버전이 다를 경우에 알맞은 버전을 설치해 주는 플러그인입니다.


   vagrant-vbguest 플러그인 설치

아래의 명령으로 설치합니다.

$ vagrant plugin install vagrant-vbguest
Installing the 'vagrant-vbguest' plugin. This can take a few minutes...
Installed the plugin 'vagrant-vbguest (0.14.2)'!

이미 생성한 box에 적용하려면 아래의 명령으로 수동으로 설치할 수 있습니다.

$ vagrant vbguest

Guest Additions가 설치된 후 vagrant reload 명령으로 vagrant machine 재시작하니까 공유 폴더가 제대로 마운트되는 것을 실행 로그에서 확인할 수 있었습니다.

지금까지 Vagrant를 사용하면서 Guest Additions 설치에 대해서 고민한 적이 없었는데, 관련 문제를 vagrant-vbguest를 통해 해결하면서 수행 로그를 보니, 꽤 수고스러운 작업을 대신 해 주는 고마운 플러그인이네요. 어쩌면 필수 플러그인이 아닐까 싶습니다.


EOF


댓글()

외부 Jenkins와 내부 네트워크 상의 GUITAR 테스트 환경 연동 2

DevOps|2017. 5. 26. 18:39

테스트 수행 VM을 Jenkins의 Slave Node로 등록

VM2를 Jenkins의 Slave Node로 추가합니다. 방법에 대해서는 아래 글을 참고하세요.

젠키스(Jenkins)에 노드(node) 추가하기

  Jenkins 대시보드에 테스트 리포트 주소 링크

Jenkins 메인 화면의 상세 내용 입력을 클릭한 후 이전 글에서 확인한 VM2의 GUITAR 리포트 주소 (http://<랩탑의 내부 아이피>:8080/report.htm)의 링크를 입력합니다.
이 링크를 통해서 Jenkins 사용자들이 테스트 리포트를 볼 수 있습니다.

만약 HTML 코드가 그대로 노출된다면 아래 글을 참고해서 진행하세요.

젠킨스(Jenkins)의 상세 내용 입력 방식을 HTML로 변경

  Jenkins에 GUITAR 테스트 프로젝트 추가

Jenkins의 새로운 Item 메뉴를 클릭하여 새로운 프로젝트를 생성합니다.

Item name에는 GUITAR_TEST를 입력하고 Freestyle project를 클릭하여 선택하고 저장합니다.


General → Restrict where this project can be run 항목을 체크하고 Label Expression에 위에서 생성한 Slave Node 이름을 입력합니다. 저의 Slave Node 이름은 GUITAR_TEST_NODE입니다.

Build → Add build step → Execute Windows batch command를 선택하고, Command 항목에는 아래의 명령을 입력합니다. 샘플 테스트 스크립트인 네이버 검색을 수행하는 명령입니다. <작업 폴더>/TESTCASE 폴더는 본인의 환경에 맞게 수정하세요.

cmd /c C:\GUITAR\BIN\guitar.exe E:\TESTCASE\SAMPLE\01_네이버검색\01_네이버검색.txt /TESTID:%BUILD_ID% /XMLPATH:%WORKSPACE% /REMOTE

빌드 후 조치 → 빌드 후 조치 추가 → Publish JUnit test result report를 선택하고, Test report XMLs 항목은 비워 두거나 report.xml을 입력합니다.

저장 버튼을 클릭하여 설정을 저장합니다.

  Jenkins에서 테스트 수행

GUITAR_TEST 프로젝트 화면에서 Build Now 버튼을 클릭하여 테스트를 수행합니다. VM2에서 Slave Node가 실행 중이고 이 Node에서 배치 명령이 실행되도록 프로젝트가 구성되었기 때문에, VM2에서 GUITAR 테스트가 수행됩니다.

수행결과는 테스트 서버와 공유한 VM2 리포트 폴더에 저장됩니다.

테스트 서버는 이 리포트 폴더를 웹으로 서비스하기 때문에 Jenkins 대시보드에 추가한 링크를 이용하면 테스트 결과 리포트를 볼 수 있습니다.


EOF


댓글()

외부 Jenkins와 내부 네트워크 상의 GUITAR 테스트 환경 연동 1

DevOps|2017. 5. 25. 18:30

이 글에서는 퍼블릭 IP를 가지고 외부에 설치된 Jenkins와 내부 네트워크의 Windows 랩탑에서 실행되는 GUITAR 테스트의 연동 방법에 대해서 다룹니다.
GUITAR 2.0.0.12 버전의 사용자 가이드에서 제시하는 내용을 실무에 적용한 경험을 정리했다고 보시면 됩니다. 따라서 부족한 부분은 GUITAR 사용자 가이드로 보충하면 되겠습니다.

  랩탑 설정

랩탑에는 톰캣과 VitualBox를 설치합니다.
톰캣은 Jenkins와 연동하여 각 테스트 환경(VM)의 테스트 리포트를 보여주기 위한 용도이며, VirtualBox는 실제 테스트를 수행하거나 테스트 스크립트를 작성할 VM을 운용하기 위해서 필요합니다.

  VirtualBox 설치 및 설정

VirtualBox를 다운로드 한 후 설치합니다. VirtualBox Extension Pack도 꼭 같이 설치해 주세요.
https://www.virtualbox.org/wiki/Downloads

GUITAR 테스트를 작성 및 수행할 OS를 기반으로 가상 머신(VM)을 2개 만듭니다. Windows 7을 추천합니다.

랩탑의 적당한 위치에 아래의 폴더를 만듭니다.

  • GUITAR_DATA - 모든 VM이 공유하는 GUITAR 작업 폴더
  • GUITAR_REPORT1 - VM1의 리포트 공유 폴더
  • GUITAR_REPORT2 - VM2의 리포트 공유 폴더

VM1은 테스트 작성용, 다른 하나(VM2)는 테스트 수행용이지만 테스트 서버에서 리포트를 보기 편하도록 각 VM의 REPORT 폴더를 테스트 서버(랩탑)와 공유하도록 설정하려고 합니다.

VirtualBox 관리자에서 VM2를 선택하고 설정(S) 메뉴를 클릭합니다.

공유 폴더를 클릭한 후 + 기호가 있는 공유 추가 버튼을 클릭하여 위에서 생성한 GUITAR_REPORT2의 경로를 폴더 경로에 입력하고 자동 마운트(A) 옵션을 체크하고 저장합니다.

마찬가지 요령으로 공유 작업 폴더를 추가하고, VM1에도 동일하게 공유 폴더를 추가합니다.

VM2에서 파일 탐색기를 띄워서 확인해 보면, 위에서 추가한 공유 폴더가 각각 E:\F:\ 드라이브로 매핑된 것을 볼 수 있습니다.


이제 각 VM에 GUITAR를 설치합니다.

VM2에는 Jenkins 연동을 위해서 추가로 Java SDK를 설치합니다.
랩탑에서 다운로드 한 후 공유 폴더를 이용해서 각 VM에서 설치토록 하면 편합니다.

각 VM에서 C:\GUITAR\BIN\guitar.ini을 편집기로 열고 리포트 폴더의 위치를 리포트 공유 폴더 위치로 변경합니다. Path = ..\Report 문자열을 검색한 후 공유 폴더 위치로 값(..\Report)을 변경하면 됩니다. 저는 F:\로 변경했습니다.

[REPORT]
AreaCaptureView = 세로
FullSizeImage = False
TestServerName =
OpenReport = True
OpenDashboardReport = False
LimitCount=100
;Path = ..\Report
Path = F:\
DashboardHost = http://localhost:8080
XMLReport = False

마찬가지로 작업 폴더의 위치도 랩탑과 공유한 작업 폴더 위치로 변경합니다. WorkPath = 문자열을 검색한 후 값을 변경하면 됩니다. 저는 E:\로 변경했습니다.

[SCRIPT]
;WorkPath = C:\GUITAR\DATA
WorkPath = E:\
;SVNPath = https://dev.naver.com/svn/guitar/xxxxx/branches/yyyyyy
PreLoadScript = 공용변수.txt
TemplateScript = 기본템플릿.txt
;PreRun ="%BINPATH%\gitpull.bat" %WorkPath%

마지막으로 VM1의 C:\GUITAR\DATA 폴더의 내용물을 공유 작업 폴더로 모두 옮겨 주고, 각 VM의 C:\GUITAR\Report 폴더의 내용물을 각각의 공유 폴더로 모두 옮겨줍니다.
작업 폴더는 모든 VM이 공유하기 때문에 VM1에서만 옮기면 모두가 공유합니다. 리포트 폴더에는 우리가 연동을 위해 사용할 스크립트와 실행 파일 등이 있기 때문에 옮겨줄 필요가 있습니다.

  Tomcat 설치

랩탑에 톰캣을 다운로드 한 후 적당한 곳에 설치합니다.
http://tomcat.apache.org/download-60.cgi

%TOMCAT_HOME%/conf/Catalina/localhost 폴더를 생성하고, 다시 ROOT.xml 파일을 아래 내용으로 생성합니다. docBase 속성의 값은 위에서 생성한 GUITAR_REPORT2 폴더의 경로입니다. 저는 F:/GUITAR_REPORT2로 넣었습니다.

<Context path="/" docBase="F:/GUITAR_REPORT2" reloadable="true"/>

URIEncoding 오류를 방지하기 위해서 아래와 같이 %TOMCAT_HOME%/conf/server.xml 파일의 8080 포트 커넥터 설정을 변경합니다.

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           edirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" />

톰캣을 실행한 후 VM2의 GUITAR 리포트 주소 (http://<랩탑의 내부 아이피>:8080/report.htm)로 접속하여 연동이 잘 됐는지 확인합니다.

너무 길어져서 다음 글에서 이어 가겠습니다.


EOF

댓글()

젠킨스(Jenkins)의 상세 내용 입력 방식을 HTML로 변경

DevOps|2017. 5. 18. 19:30

젠킨스의 메인이나 작업(프로젝트) 페이지에는 상세 내용을 입력하는 기능이 있습니다.


기본 설정으로는 Plain text만 입력이 가능한데요. 링크 등을 제공하기 위해서 HTML을 사용하고 싶을 때가 있습니다.
이런 경우 설정 변경을 통해 HTML 입력이 가능합니다.


설정은 간단합니다. 의외의 장소에 있어서 찾기가 어렵긴 하지만요.
Jenkins 관리 → Configure Global Security 메뉴로 이동한 후 Markup Formatter 항목의 값을 Raw HTML로 변경하면 됩니다.




EOF

댓글()

젠키스(Jenkins)에 노드(node) 추가하기

DevOps|2017. 5. 16. 19:00

젠키스(Jenkins)에 노드(node) 추가하기

CI 서버(Jenkins)는 EC2 등의 퍼블릭 IP로 접근 가능한 외부에 있고 특정 작업(job)을 사내에서 수행하는 경우 보안 문제 때문에 사내망을 CI에서 접근하도록 허용하는 건 어렵습니다. 이런 경우에 대한 해결책으로 자바 웹스타트를 통해 사내에 젠킨스 노드를 추가 할 수 있습니다. 제 경우는 사내의 Windows 랩탑에서 GUITAR 테스트를 수행하기 위해서 이 방법을 택했습니다.

Jenkins 관리 → 노드 관리 → 신규 노드 메뉴를 이용해서 노드를 추가합니다.

노드명을 입력하고 Permanent Agent를 선택한 후 OK 버튼을 클릭합니다.

이어지는 화면에서 Remote root directory에는 c:\jenkins를 입력하고 Launch method는 Launch agent via Java Web Start를 선택합니다. 나머지 설정은 기본 값을 유지하고 저장합니다.

아직 새 노드와 연결이 안됐기 때문에 노드 목록에는 오프라인으로 나옵니다. 이제 연결을 해야 합니다.

사내망 안의 Windows 랩탑에서 위에서 생성한 노드 화면에 접속합니다. Launch 버튼을 클릭하면 jnlp 파일(slave-agent.jnlp)을 다운로드 혹은 바로 실행할 수 있습니다. 혹 보안 경고가 뜨더라도 무시하고 jnlp 파일을 실행하세요. Jenkins slave agent가 실행되고 젠킨스 서버에 접속 중이라는 내용이 나오다가 곧 Connected로 내용이 변경됩니다. 만약 접속이 안되면 접속 중인 젠킨스 서버의 포트를 확인하세요. 접속 중 화면에 나온 포트(42031)가 접속 가능한지 확인하면 됩니다.

JNLP 에이전트의 포트는 무작위로 할당됩니다. 포트 고정이 필요하면 Jenkins 관리 → Configure Global Security 메뉴에서 TCP port for JNLP agents를 Fixed로 변경하고 원하는 포트 번호를 넣으면 됩니다.

이제 노드 화면을 새로고침하면 JNLP로 연결된 것으로 내용이 변경된 것을 확인할 수 있습니다.

노드 관리 화면의 목록에도 새 노드의 정보가 나옵니다.

랩탑을 재부팅 했을 때에도 연결을 유지하려면 Jenkins slave agent의 File → Install as a service 메뉴를 이용해서 윈도 서비스로 등록하면 됩니다.


EOF

댓글()

Trello - 리스트 최상단에 카드 추가하기

DevOps|2015. 3. 16. 20:14

Trello 보드에 카드를 추가하려면 보통 리스트 하단의 Add a card를 클릭한 다음 내용을 입력하고 엔터를 치거나 Add를 클릭합니다.

위의 방식으로 한동안 잘 사용해 왔는데 리스트에 카드가 늘어나니까, 최근에 작성한 카드가 맨 아래에 추가되서 눈에 안띄게 됩니다.
카드가 눈에 띄도록 리스트 최상단에 추가해 보겠습니다.

Trello는 보드를 열면 모든 리스트의 스크롤이 최상단에 있기 때문에, 목록에 카드가 많으면 스크롤을 끝까지 내려야 최근에 추가한 카드를 볼 수 있습니다.

리스트 제목 오른쪽에 있는 메뉴를 클릭합니다. 리스트 메뉴는 작고 둥근 회색 버튼이라서 눈에 잘 띄지 않습니다.

Add Card 메뉴를 클릭합니다.

리스트 최상단에 카드 제목을 입력란이 생성됩니다. 내용을 입력하고 Add 버튼을 클릭하면 새 카드가 추가됩니다.

댓글()

Trello 일정을 구글 캘린더와 연동하기

DevOps|2015. 2. 26. 11:16

Trello 보드에 있는 카드에 누군가 Due date를 설정하면 이게 하나의 일정이 됩니다.

그런데 저는 일정 관리를 모두 구글 캘린더를 통해 하고 있기 때문에 이 관리 안되는 Trello 일정이 꽤나 거슬렸습니다. Sunrise라는 Trello를 지원하는 캘린더 앱을 사용하고 있지만 캘린더 앱 두 개를 사용하는건 쉽지 않습니다.

찾아 보니 Trello는 iCal 형식의 캘린더 주소를 제공하고 있었습니다. 그것도 모르고 이래저래 괜한 시간낭비를 한 저 자신을 원망하면서 연동 방법을 남깁니다.

Trello 보드에서 iCalendar Feed URL 얻기

Trello 보드 우상단에 있는 Menu의 하위 메뉴 Power-Ups를 클릭합니다.

Power-Ups에서 Calendar를 클릭하고 Enable을 클릭하여 Calendar를 활성화합니다. 이렇게 하면 위 이미지 좌상단에 보이는 Calendar 메뉴가 생기며, 이 메뉴를 통해 달력 형식으로 보드에 있는 일정을 볼 수 있습니다.

Enable iCalendar Feed? 항목에 있는 Enable을 클릭하면 바로 아래에 있는 Your Personal iCalendar Feed에 Feed URL이 생성됩니다. 이 URL을 복사합니다.

구글 캘린더에 추가하기

이제 구글 캘린더로 이동한 후 화면 좌측 중간쯤에 있는 다른 캘린더 > URL로 추가를 클릭합니다.

URL란에 아까 복사한 Feed URL을 붙여넣기 한 후 캘린더 추가를 클릭하면 연동이 완료됩니다.

아쉽지만 캘린더를 추가한 후에 바로 Trello 일정이 구글 캘린더에 나타나지는 않습니다. 하루 한 번 정도 구글 마음대로 동기화를 한다고 합니다.


댓글()

AWS에 설치된 MySQL DB를 외부 접속이 가능 하도록 설정

DevOps|2015. 2. 22. 01:45

설치 환경

AWS에 Ubuntu 14.04를 기반으로 인스턴스를 생성하고 sudo apt-get install mysql-server 명령으로 MySQL을 설치

  • 버전 - MySQL 5.5(5.5.41-0ubuntu0.14.04.1)

AWS - Security Group 설정

Inbound 탭에서 3306 포트를 열고 SourceAnywhere(0.0.0.0)으로 설정

MySQL 설정 파일(/etc/mysql/my.cnf) 수정

bind-address 항목을 찾아서 0.0.0.0으로 변경(이전 값은 127.0.0.1)

MySQL 재시작

service mysql restart

ROOT 계정으로 외부에서 접속 가능하게 하려면

아래의 명령을 MySQL monitor에서 실행

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 49
Server version: 5.5.41-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.12 sec)


댓글()

Install knife-solo(knife-solo 설치)

DevOps|2014. 10. 21. 09:00

knife-solo는 gem을 통해 쉽게 설치가 가능합니다.

$ gem install knife-solo
Fetching: knife-solo-0.4.2.gem (100%)
Thanks for installing knife-solo!

If you run into any issues please let us know at:
  https://github.com/matschaffer/knife-solo/issues

If you are upgrading knife-solo please uninstall any old versions by
running `gem clean knife-solo` to avoid any errors.

See http://bit.ly/CHEF-3255 for more information on the knife bug
that causes this.
Successfully installed knife-solo-0.4.2
1 gem installed
Installing ri documentation for knife-solo-0.4.2...
Installing RDoc documentation for knife-solo-0.4.2...

Chef를 설치한 후, /opt/chef/embedded/bin 디렉토리를 PATH에 추가하면 쉽게 gem을 사용할 수 있으니 Chef설치 글을 참고하세요.

댓글()

Install Chef on CentOS(Chef 설치)

DevOps|2014. 10. 20. 09:00

Chef 설치는 아래와 같이 간단한 명령으로 가능합니다. 하지만 같이 설치되는게 많아서 무척 오래 걸립니다. 유의하세요.

$ curl -L http://www.opscode.com/chef/install.sh | sudo bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 48 16514   48  8001    0     0   6550      0  0:00:02  0:00:01  0:00:01  8687Downloading Chef  for el...
100 16514  100 16514    0     0   9853      0  0:00:01  0:00:01 --:--:-- 12010
downloading http://www.opscode.com/chef/metadata?v=&prerelease=false&nightlies=false&p=el&pv=6&m=i686
  to file /tmp/install.sh.1845/metadata.txt
trying curl...
url     http://opscode-omnibus-packages.s3.amazonaws.com/el/6/i686/chef-11.16.4-1.el6.i686.rpm
md5     da7bbe41d9510de62adf6afe89ed2ecd
sha256  545075be04de512c780c961b3aa3809c4540fd68c47c167eced67a8daa0821b7
downloaded metadata file looks valid...
downloading http://opscode-omnibus-packages.s3.amazonaws.com/el/6/i686/chef-11.16.4-1.el6.i686.rpm
  to file /tmp/install.sh.1845/chef-11.16.4-1.el6.i686.rpm
trying curl...
Comparing checksum with sha256sum...
Installing Chef
installing with rpm...
warning: /tmp/install.sh.1845/chef-11.16.4-1.el6.i686.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing...                ########################################### [100%]
   1:chef                   ########################################### [100%]
Thank you for installing Chef!

설치 후에는 아래와 같이 /opt/chef/embedded/bin 디렉토리를 PATH에 추가해 줍니다. ruby, gem 등을 따로 설치하지 않고도 사용할 수 있게 됩니다. 상당히 유용하더군요.

$ echo 'export PATH="/opt/chef/embedded/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile


댓글()

SonarQube Runner를 사용하여 프로젝트 분석하기

DevOps|2014. 8. 17. 17:11

다운로드

아래의 SonarQube Runner 페이지에서 다운로드할 수 있습니다.

Installing and Configuring SonarQube Runner

여기에서는 2.4 버전을 다운로드하여 사용했습니다.

설치

다운로드 받은 zip 파일을 원하는 경로를 지정하여 압축을 해제합니다. <설치 디렉토리>/conf/sonar-runner.properties 파일을 열어서 자신의 환경에 맞게 수정합니다. 동일한 PC에 SonarQube를 설치했고 기본 설정을 변경하지 않았으면, sonar.jdbc.* 속성의 주석을 해제하는 정도가 할일의 전부입니다.

저는 SonarQube 서버를 같은 PC에 설치했고 MySQL을 사용하고 있기 때문에 아래과 같이 설정을 완료했습니다.

#----- Default SonarQube server
sonar.host.url=http://localhost:9000

#----- PostgreSQL
#sonar.jdbc.url=jdbc:postgresql://localhost/sonar

#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8

#----- Oracle
#sonar.jdbc.url=jdbc:oracle:thin:@localhost/XE

#----- Microsoft SQLServer
#sonar.jdbc.url=jdbc:jtds:sqlserver://localhost/sonar;SelectMethod=Cursor

#----- Global database settings
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

#----- Security (when 'sonar.forceAuthentication' is set to 'true')
#sonar.login=admin
#sonar.password=admin

SONAR_RUNNER_HOME 시스템 환경변수를 만들고 그 값으로 [설치 디렉토리]를 설정합니다.

[설치 디랙토리]\bin 디렉토리(%SONAR_RUNNER_HOME%\bin)를 path에 추가합니다. 이제 SonarQube Runner의 설치가 완료되었습니다.

프로젝트 분석

분석할 프로젝트의 루트 디렉토리에 sonar-project.properties 파일을 생성합니다. 저는 Enyo Framework를 clone 한 후 분석했기 때문에 아래와 같이 내용을 채웠습니다.

source 디렉토리에 분석 할 JavaScript 소스 코드가 있어서 sonar.sources 속성 값으로 지정했으며, SonarQube Update Center에서 JavaScript 플러그인을 설치했습니다.

sonar.projectKey=Enyo
sonar.projectName=Enyo
sonar.projectVersion=2.3
sonar.sources=source
sonar.sourceEncoding=UTF-8

이제 명령 프롬프트를 띄우고 프로젝트 루트 디렉토리로 이동한 후, sonar-runner를 실행합니다(SonarQube 서버는 이미 동작 중이어야 합니다).

D:\dev\repos\enyo>sonar-runner
D:\dev\tool\sonar-runner
SonarQube Runner 2.4
Java 1.7.0_60 Oracle Corporation (32-bit)
Windows 7 6.1 x86
INFO: Runner configuration file: D:\dev\tool\sonar-runner\conf\sonar-runner.properties
INFO: Project configuration file: D:\dev\repos\enyo\sonar-project.properties
INFO: Default locale: "ko_KR", source code encoding: "UTF-8"
INFO: Work directory: D:\dev\repos\enyo\.\.sonar
INFO: SonarQube Server 4.4
16:06:33.508 INFO  - Load global settings
16:06:34.063 INFO  - User cache: C:\Users\heuser\.sonar\cache
16:06:34.087 INFO  - Install plugins
16:06:35.588 INFO  - Install JDBC driver
16:06:35.610 INFO  - Create JDBC datasource for jdbc:mysql://localhost:3306/sonar?useUnicode=true&amp;characterEncoding=utf8
16:06:36.479 INFO  - Initializing Hibernate
16:06:45.716 INFO  - Loading technical debt model...
16:06:45.754 INFO  - Loading technical debt model done: 37 ms
16:06:45.772 INFO  - Load project settings
16:06:45.805 INFO  - Apply project exclusions
16:06:46.069 INFO  - -------------  Scan Enyo
16:06:46.131 INFO  - Load module settings
16:06:51.278 INFO  - Loading rules...
16:06:51.470 INFO  - Loading rules done: 192 ms
16:06:51.566 INFO  - Configure Maven plugins
16:06:51.697 INFO  - No quality gate is configured.
16:06:52.256 INFO  - Base dir: D:\dev\repos\enyo\.
16:06:52.257 INFO  - Working dir: D:\dev\repos\enyo\.\.sonar
16:06:52.259 INFO  - Source dirs: D:\dev\repos\enyo\source
16:06:52.262 INFO  - Source encoding: UTF-8, default locale: ko_KR
16:06:52.266 INFO  - Index files
16:06:54.633 INFO  - 120 files indexed
16:06:56.894 INFO  - Quality profile for js: Sonar way
16:06:56.939 INFO  - JaCoCo report not found.
16:06:56.944 INFO  - JaCoCo IT report not found.
16:06:56.947 INFO  - JaCoCo reports not found.
16:06:56.984 INFO  - Sensor QProfileSensor...
16:06:56.991 INFO  - Sensor QProfileSensor done: 7 ms
16:06:56.991 INFO  - Sensor JavaScriptSquidSensor...
16:06:57.060 INFO  - 120 source files to be analyzed
16:06:59.101 INFO  - 120/120 source files analyzed
16:06:59.491 INFO  - Sensor JavaScriptSquidSensor done: 2500 ms
16:06:59.491 INFO  - Sensor CpdSensor...
16:06:59.492 INFO  - SonarBridgeEngine is used for js
16:06:59.498 INFO  - Cross-project analysis disabled
16:07:01.143 INFO  - Sensor CpdSensor done: 1652 ms
16:07:01.143 INFO  - Sensor InitialOpenIssuesSensor...
16:07:01.179 INFO  - Sensor InitialOpenIssuesSensor done: 36 ms
16:07:01.179 INFO  - Sensor ProjectLinksSensor...
16:07:01.186 INFO  - Sensor ProjectLinksSensor done: 7 ms
16:07:01.188 INFO  - Sensor VersionEventsSensor...
16:07:01.196 INFO  - Sensor VersionEventsSensor done: 8 ms
16:07:01.196 INFO  - Sensor FileHashSensor...
16:07:01.203 INFO  - Sensor FileHashSensor done: 7 ms
16:07:01.396 INFO  - Execute decorators...
16:07:02.346 INFO  - Store results in database
16:07:05.655 INFO  - ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard/index/Enyo
16:07:05.706 INFO  - Executing post-job class org.sonar.plugins.core.issue.notification.SendIssueNotificationsPostJob
16:07:05.774 INFO  - Executing post-job class org.sonar.plugins.core.batch.IndexProjectPostJob
16:07:06.051 INFO  - Executing post-job class org.sonar.plugins.dbcleaner.ProjectPurgePostJob
16:07:06.060 INFO  - -> Keep one snapshot per day between 2014-07-09 and 2014-08-05
16:07:06.061 INFO  - -> Keep one snapshot per week between 2013-08-07 and 2014-07-09
16:07:06.062 INFO  - -> Keep one snapshot per month between 2009-08-12 and 2013-08-07
16:07:06.065 INFO  - -> Delete data prior to: 2009-08-12
16:07:06.069 INFO  - -> Clean Enyo [id=33]
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
Total time: 38.279s
Final Memory: 11M/111M
INFO: ------------------------------------------------------------------------

분석이 정상적으로 완료되면 SonarQube에서 분석결과를 확인할 수 있습니다.

댓글()

SonarQube 설치 및 설정

DevOps|2014. 8. 5. 22:23

MySQL Database

설치

MySQL 다운로드 페이지에서 설치 파일을 받아서 설치하거나, 아래 링크의 글에서 MySQL 설치 절을 참고하여 MySQL을 설치합니다.

MySQL 5.0.45 원하는 위치에 수동 설치 및 윈도 서비스로 등록 하기

여기에서는 윗 글을 참고하여 수동 설치 했으며, 오래된 5.0.45 버전 대신 5.1 대의 최신 버전인 5.1.73 버전을 사용했습니다.

설정

SonarQube 설치 문서에서 InnoDB 사용을 권장하고 있기 때문에 my.ini 파일의 [mysqld] 옵션을 아래와 같이 수정했습니다.

query_cache_type, query_cache_size 옵션을 추가했고, innodb 관련 옵션(innodb_*)은 값을 수정한 부분이 많습니다.

innodb_data_home_dir, innodb_log_group_home_dir 경로는 본인의 설치 경로에 맞게 수정해 주세요.

[mysqld]
port        = 3306
socket      = MySQL
skip-locking
key_buffer_size = 16K
max_allowed_packet = 1M
table_open_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 128K
query_cache_type = 1
query_cache_size = 32M

# Don't listen on a TCP/IP port at all. This can be a security enhancement,
# if all processes that need to connect to mysqld run on the same host.
# All interaction with mysqld must be made via Unix sockets or named pipes.
# Note that using this option without enabling named pipes on Windows
# (using the "enable-named-pipe" option) will render mysqld useless!
# 
#skip-networking
server-id   = 1

# Uncomment the following if you want to log updates
#log-bin=mysql-bin

# binary logging format - mixed recommended
#binlog_format=mixed

# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = D:\\dev\\tool\\mysql\\data\\
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = D:\\dev\\tool\\mysql\\data\\
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 32M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

이제 명령 프롬프트를 하나 띄우고 database 스크립트 파일을 다운로드 받은 후 실행합니다.

D:\dev\tool\mysql\bin> mysql -u root -p < create_database.sql

sonar라는 이름의 Database와 사용자가 MySQL에 생성돼 있으면 스크립트가 잘 실행된 겁니다.

SonarQube

다운로드

아래 링크에서 SonarQube 4.4 버전을 다운로드 받아서 설치합니다. 만약 4.4 버전이 보이지 않으면 “Show all versions” 링크를 누르면 이전 버전이 보입니다.

http://www.sonarqube.org/downloads/

원하는 곳에 다운로드 받은 압축파일을 해제하면 설치는 완료입니다.

설정

SonarQube 설치 디렉토리 하위의 conf 디렉토리에 있는 sonar.properties 파일을 텍스트에디터로 엽니다. 아래와 같이 H2 database 관련 sonar.jdbc.url은 주석 처리하고, MySQL database 쪽의 주석은 없앱니다.

# Comment the following line to deactivate the default embedded database.
#sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar

# directory containing H2 database files. By default it's the /data directory in the SonarQube installation.
#sonar.embeddedDatabase.dataDir=
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092


#----- MySQL 5.x
# Comment the embedded database and uncomment the following line to use MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

실행

SonarQube 설치 디렉토리 하위의 bin 디렉토리에는 각 플랫폼 별로 디렉토리가 구분되어 있습니다. 각자의 플랫폼에 맞는 디렉토리에 있는 실행파일로 SonarQube를 실행할 수 있습니다.

저는 Win32라서 [설치 디렉토리]\bin\windows-x86-32\StartSonar.bat 파일로 실행할 수 있었습니다.

MySQL을 먼저 실행한 후 SonarQube를 실행합니다. SonarQube 콘솔 창에 다음과 같이 웹서버가 시작되었다는 메시지가 나온 후, 브라우저에서 http://localhost:9000/에 접속하면 SonarCube Dashboards를 볼 수 있습니다.

wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | 2014.08.05 13:58:09 INFO  Web server is started

이제 관리자 계정(admin/admin)으로 로그인한 후 플러그인 설치 등의 작업을 진행하면 됩니다.

댓글()

MySQL 5.0.45 원하는 위치에 수동 설치 및 윈도 서비스로 등록 하기

DevOps|2008. 2. 20. 10:10

테스트 환경으로 사용할 일이 생겨서 MySQL을 집에 설치 했었습니다. 인스톨러 없이 D:\TOOLS 디렉토리에 UTF-8 환경으로 설치한 후 윈도 서비스로 등록까지 마쳤는데... 오늘 설치본을 그대로 복사해서 회사에서 사용하는 컴퓨터에 설치하려고 하니 어떻게 했는지 기억이 전혀 안나더군요. :-( 이러한 이유로 여기에 설치법을 남깁니다.


MySQL 설치

저는 MySQL AB다운로드 페이지에 있는 윈도 버전 중 수동설치 버전(Without installer 혹은 ZIP Archive라고 써 있는 놈)을 다운로드 받았습니다. MySQL Account 만들거냐고 물어보면 아래에 있는 "No Thanks..." 링크를 눌러서 등록 안하고 받으셔도 됩니다.


무설치 버전인 만큼 설치는 매우 간단합니다. 원하는 디렉토리에 압축을 풀어주기만 하면 되죠!
저는 D:\TOOLS\mysql-5.0.45-win32 디렉토리에 압축을 풀었습니다.

다른 작업 없이 명령 프롬프트를 하나 실행한 다음 D:\TOOLS\mysql-5.0.45-win32\bin 디렉토리로 이동한 후에 "mysqld --console" 명령만 실행하셔도 MySQL 서버를 바로 사용하실 수 있습니다.

D:\TOOLS\mysql-5.0.45-win32\bin>mysqld --console
080220 10:47:57  InnoDB: Started; log sequence number 0 19944194
080220 10:47:58 [Note] mysqld: ready for connections.
Version: '5.0.45-community-nt'  socket: ''  port: 3306  MySQL Community Edition (GPL)

위와 비슷한 메시지를 보여 주며 오류 없이 MySQL 서버가 시작된 후, 다음과 같이 "mysqlshow -u root" 명령을 실행하시면 Database 목록을 볼 수 있습니다.

D:\TOOLS\mysql-5.0.45-win32\bin>mysqlshow -u root
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+


위의 과정만으로도 MySQL은 사용할 수 있는 상태가 되었습니다만, 좀 더 세밀한 설정을 하기 위해서는 옵션 파일을 만들어 줘야 합니다. 옵션 파일의 예제가 설치 디렉토리에 있기 때문에 약간의 수정을 해주면 바로 사용할 수 있습니다. 설치 디렉토리(D:\TOOLS\mysql-5.0.45-win32)를 보면 5개의 ini 확장자를 가진 파일이 있습니다. 용도에 따라 선택 하시면 됩니다. 저는 간단한 테스트가 목적이기 때문에 my-small.ini 파일을 선택했습니다.
MySQL은 "[설치 디렉토리]\my.ini" 파일 혹은, "C:\Windows\my.ini" 파일이나 "C:\my.cnf" 파일을 옵션 파일로 찾습니다. 저는 my-small.ini 파일의 복사본을 하나 만들어서 my.ini로 이름을 변경한 후, "C:\Windows" 디렉토리로 복사해서 옵션 파일 설정을 마쳤습니다.

MySQL은 Windows directory에서 my.ini 파일을 찾습니다. Windows directory 경로는 윈도 종류에 따라서 다르기 때문에 정확한 경로를 확인하려면, 명령 프롬프트에서 다음의 명령을 실행해 보시면 됩니다.

C:\> echo %WINDIR%


윈도 서비스로 등록하기

이 글에서 옵션파일을 만들어서 사용하는 목적은 윈도 서비스로 MySQL을 등록하기 위해서입니다. 이를 위한 최소한의 수정을 한 후 MySQL을 윈도 서비스로 등록해 보겠습니다.

윈도 서비스로 등록하기 위해서는 my.ini 파일에 설치 경로를 명시해야합니다.
위에서 만든 "C:\Windows\my.ini" 파일을 열어서 "[mysqld]" 섹션을 찾은 후 다음의 2줄을 넣어 줍니다(경로 구분자로 '\'가 아닌 '/'를 사용합니다. 주의하세요!).

basedir = D:/TOOLS/mysql-5.0.45-win32
datadir  = D:/TOOLS/mysql-5.0.45-win32/data


쉽게 짐작할 수 있겠지만, 위의 내용은 설치경로와 MySQL이 사용하는 데이터의 저장 경로입니다.
이제 my.ini 파일은 아래와 비슷한 내용으로 변경되었을겁니다.

# The MySQL server
[mysqld]
basedir = D:/TOOLS/mysql-5.0.45-win32
datadir  = D:/TOOLS/mysql-5.0.45-win32/data

port  = 3306
socket  = /tmp/mysql.sock
skip-locking
key_buffer = 16K
max_allowed_packet = 1M
table_cache = 4
sort_buffer_size = 64K
read_buffer_size = 256K
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 64K


이제 윈도 서비스로 등록을 해보죠. MySQL이 실행 중이라면, 아래의 명령을 실행하여 MySQL을 죽입니다.
D:\TOOLS\mysql-5.0.45-win32\bin>mysqladmin -u root shutdown

MySQL이 완전히 종료된 것을 확인한 후, 아래의 명령으로 MySQL을 윈도 서비스로 등록할 수 있습니다.
D:\TOOLS\mysql-5.0.45-win32\bin>mysqld --install

만약 MySQL 서비스의 시작유형을 자동이 아닌 수동으로 하고 싶다면, 아래의 명령으로 등록합니다.
D:\TOOLS\mysql-5.0.45-win32\bin>mysqld --install-manual

설치된 MySQL 서비스를 삭제하고 싶으면, 아래의 명령으로 삭제할 수 있습니다.
D:\TOOLS\mysql-5.0.45-win32\bin>mysqld --remove

윈도 서비스 등록에 대한 더 많은 정보를 원하시면 이곳의 문서를 참고하세요~!
charset euckr
set character set euckr;
show variables like 'c%';


'DevOps' 카테고리의 다른 글

Install knife-solo(knife-solo 설치)  (0) 2014.10.21
Install Chef on CentOS(Chef 설치)  (0) 2014.10.20
SonarQube Runner를 사용하여 프로젝트 분석하기  (0) 2014.08.17
SonarQube 설치 및 설정  (2) 2014.08.05
HSQLDB 시작하기  (2) 2007.11.30

댓글()

HSQLDB 시작하기

DevOps|2007. 11. 30. 11:36

자바개발환경만 있으면 간단하게 사용할 수 있는 Database Engine인 HSQLDB를 설치해 보겠습니다.


HSQLDB 설치

먼저 소스포지의 다운로드 페이지에서 HSQLDB를 다운로드 받습니다. 현재(2007-11-30) 최신버젼은 1.8.0.9 버젼이군요.
사실 HSQLDB는 설치라고 할만한 과정이 없습니다. 그냥 압축파일의 lib 폴더 안에 있는 hsqldb.jar 파일만 있으면 HSQLDB를 사용할 수 있습니다. 원하는 곳에 복사하고 원하는 방식으로 실행을 하면 됩니다.
저는 하이버네이트 테스트를 위해서 설치한 터라 "D:\WORKSPACE_JEE\HibernatePractice\lib" 폴더에 넣었습니다.

사용자 삽입 이미지


HSQLDB 실행

HSQLDB는 Server Mode라고 부르는 3가지의 실행방법을 가지고 있습니다. 이 Server Mode 중 가장 일반적인 방식인 Hsqldb Server로 실행하는 방법에 대해서 알아보겠습니다. 다른 방식에 대해서는 나중에 또 기회가 있을거라고 생각합니다. :-)

명령 프롬프트 창을 하나 띄우고 다음과 같이 입력합니다.

D:\WORKSPACE_JEE\HibernatePractice>java -classpath lib/hsqldb.jar org.hsqldb.Server -database.0 file:data/test -dbname.0 javaworld


"-database.0 file:data/test" 옵션은 Database가 사용할 경로와 파일명을 명시하고 있습니다. 예에서는 상대경로로 현재 폴더 아래의 data 폴더에 "test.*" 형식으로 관련 파일을 생성하라고 얘기하고 있습니다. 물론 절대경로로 지정해도 됩니다.

D:\WORKSPACE_JEE\HibernatePractice>java -classpath lib/hsqldb.jar org.hsqldb.Server -database.0 file:D:\WORKSPACE_JEE\HibernatePractice\data\test -dbname.0 javaworld

[Server@1270b73]: [Thread[main,5,main]]: checkRunning(false) entered
[Server@1270b73]: [Thread[main,5,main]]: checkRunning(false) exited
[Server@1270b73]: Startup sequence initiated from main() method
[Server@1270b73]: Loaded properties from [D:\WORKSPACE_JEE\HibernatePractice\server.properties]
[Server@1270b73]: Initiating startup sequence...
[Server@1270b73]: Server socket opened successfully in 40 ms.
[Server@1270b73]: Database [index=0, id=0, db=file:data/test, alias=javaworld] opened sucessfully in 1351 ms.
[Server@1270b73]: Startup sequence completed in 1411 ms.
[Server@1270b73]: 2007-12-05 10:50:20.203 HSQLDB server 1.8.0 is online
[Server@1270b73]: To close normally, connect and execute SHUTDOWN SQL
[Server@1270b73]: From command line, use [Ctrl]+[C] to abort abruptly

"-dbname.0 javaworld" 옵션은 Databse의 alias(별칭)을 지정하고 있습니다. 위의 경우는 'javaworld'라는 이름으로 Database의 이름을 지정하고 있는거죠. 이 alias는 어플리케이션에서 jdbc를 통해 hsqldb에 접근할 때 사용하게 됩니다. 위의 경우 jdbc connection URL은 "jdbc:hsqldb:hsql://localhost/javaworld"입니다.

각 옵션명의 뒤쪽에 붙어있는 ".0" 이라는 문자는 database의 인덱스를 의미합니다. hsqldb는 0~9까지의 인덱스 값을 허용하므로, 총 10개의 Database를 동시에 띄울 수 있습니다.
즉 옵션 "-database.0 file:data/test -dbname.0 javaworld"은 인덱스 값 0에 할당된 Database가 현재 폴더 아래의 'data' 폴더에 'test.*' 형식의 관련 파일들을 사용하며, alias(dbname)은 javaworld라는 것을 의미합니다. 위의 실행 예에 녹색으로 표시된 부분을 보면 이해에 조금 더 도움이 될겁니다.

Database Manager

Database Manager는 HSQLDB Database에 질의를 하거나 테이블 등의 Database 객체를 볼 수 있게 해주는 GUI 툴입니다.
Database Manager는 hsqldb.jar 파일에 포함 되어 있기 때문에 아래와 같이 명령 프롬프트에서 입력하면 바로 사용이 가능합니다.

D:\WORKSPACE_JEE\HibernatePractice>java -classpath lib/hsqldb.jar org.hsqldb.util.DatabaseManager


사용자 삽입 이미지javaworld Database 접속


javaworld database가 이미 실행 중이라면 위와 같이 Driver, URL 등을 입력하고 OK 버튼을 누르면 바로 javaworld database를 관리할 수 있습니다.

사용자 삽입 이미지


DDL이나 DML을 입력한 후 Execute 버튼을 누르면(단축키 : Ctrl-Enter) 입력한 SQL문이 실행됩니다.
위와 같이 DDL 문을 실행했을 경우에는 좌측의 트리가 자동으로 갱신되지 않는데, 이럴 때는 View-Refresh Tree 메뉴를 한 번 클릭해 주면 갱신된 트리를 볼 수 있습니다.

사용법이 매우 직관적이고 간단하기 때문에 메뉴 등을 직접 살펴보면 더이상의 설명은 필요 없을 듯합니다. :-)

댓글()