Tools/GoCD

GoCD 설치 (on CentOS 7)

Tongchun 2019. 4. 3. 15:30

웹 개발 후 배포 서버를 찾다가 GoCD를 확인했습니다.

https://www.gocd.org/

배포에 목적이 있는거라 CD (Continuous Delivery) 입니다. Jenkins와 비교도 해놨네요.

https://www.gocd.org/jenkins/

우선 설치해 보겠습니다.

CentOS7을 준비했습니다. 서버 정보부터 확인하고 가겠습니다.

$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

 

Java를 설치합니다.

java8이 필요합니다. OpenJDK로 설치하겠습니다.

$ sudo yum -y install java-1.8.0-openjdk-devel

java가 설치 되었다면 버전을 확인해 봅니다.

$ java -version
openjdk version "1.8.0_201"
OpenJDK Runtime Environment (build 1.8.0_201-b09)
OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)

java를 설치했다면 JAVA_HOMEJRE_HOME를 설정해 줘야 합니다.

아래 명령으로 java 경로를 확인합니다.

readlink -f $(which java)

$ readlink -f $(which java)
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/jre/bin/java

java 경로를 확인했다면 echo 명령으로 ~/.bash_profile에 추가합니다.

JAVA_HOME의 경로는 버전 경로까지이고 JRE_HOME 경로는 버전 다음에 jre 경로 까지 입니다.

$ echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64" >> ~/.bash_profile
$ echo "export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/jre" >> ~/.bash_profile

echo로 ~/.bash_profile 파일에 추가했다면 bash_profile 파일을 실행합니다.

$ source ~/.bash_profile

적용이 잘 됐는지 확인하려면 echo 명령으로 JAVA_HOME 과 JRE_HOME 변수를 확인해 보면 됩니다.

$ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64
$ echo $JRE_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el7_6.x86_64/jre

 

GoCD를 설치합니다.

GoCD는 java로 개발되었습니다. yum을 이용해 설치하려면 repository를 다운받아 설치할 수 있습니다.

$ sudo curl https://download.gocd.org/gocd.repo -o /etc/yum.repos.d/gocd.repo

gocd.repo를 다운받았다면 yum으로 설치합니다.

$ sudo yum install -y go-server

go-server를 실행해 줍니다. 그리고 서버가 재시작 되더라도 자동으로 실행하도록 설정합니다.

$ sudo systemctl start go-server
$ sudo systemctl enable go-server

GoCD dashboard에 접속하기 전에 artifacts를 저장할 수 있는 경로를 만들어 줍니다.

참고로 artifacts를 어떻게 번역해야 하는지 고민했는데 그냥 artifacts라고 하겠습니다. 

아래 링크에서도 '사용흔적'이 어느정도 적당한 번역이라고 얘기하고 그냥 artifacts로 쓰고있는 것 같습니다.

http://forensic-proof.com/archives/3710

 

저는 /opt/artifacts 에 만들어 주겠습니다. 폴더를 만들고 권한도 설정합니다.

$ sudo mkdir /opt/artifacts
$ sudo chown -R go:go /opt/artifacts

참고로 CI 또는 CD 플랫폼의 경우 artifacts가 빈번하게 생성되므로 디스크 사이즈가 작을 경우 금방 차게 됩니다.

GoCD에서도 별도의 (추가) Drive에 artifacts를 저자하는 것을 권장하고 있습니다.

 

방화벽 설정을 합니다.

방화벽이 실행되고 있다면 GoCD에서 사용하는 port를 열어줘야 합니다.

GoCD는 http일 경우 8153, https일 경우 8154 Port를 사용합니다. 저는 둘 다 열어주겠습니다.

방화벽 설정을 적용한 후에는 reload 해 줍니다.

$ sudo firewall-cmd --zone=public --add-port=8153/tcp --permanent
$ sudo firewall-cmd --zone=public --add-port=8154/tcp --permanent
$ sudo firewall-cmd --reload

 

GoCD Server 설정을 합니다.

이제 설치는 다 했습니다.

브라우저에서 http://<서버 IP>:8153으로 접속해 봅니다.

GoCD에 처음 접속하면 Basic Settings가 나오면서 Pileline Name을 적으로고 합니다.

우리는 먼저 상단 메뉴의 ADMIN에서 Server Configuration에 들어가 설정을 해주겠습니다.

Site URL에 http:// 를 포함한 서버 IP와 8153 포트를 추가합니다.

Secure Site URL에는 https://를 포함한 서버 IP와 8154 포트를 추가합니다.

 

그 다음은 메일 설정입니다.

사용하고 있는 SMTP 서버 정보와 Email 정보를 넣습니다.

 

마지막으로 artifacts 관리에 대한 설정입니다.

Artifacts Directory Location에 앞서 설정한 경로 /opt/artifacts를 추가합니다.

그리고 사용 가능한 디스크 사이즈가 2G 이하일 경우 10G의 여유 공간이 생길때 까지 오래된 artifacts를 자동 삭제합니다.

설정을 완료하고 SAVE 버튼을 클릭해 줍니다.

설정을 적용하려면 go-server를 재시작 해야합니다.

$ sudo systemctl restart go-server

 

인증 설정을 합니다.

GoCD는 LDAP 또는 Password 기반의 인증을 설정할 수 있습니다.

htpasswd를 사용해 암호화된 Password 파일을 만들어 사용하겠습니다. 아래처럼 httpd-tools를 설치합니다.

$ sudo yum -y install httpd-tools

httpd-tools가 설치 되었다면 htpasswd 명령으로 Bcrypt 암호화된 Passward 파일을 만들어 줍니다.

아래와 같이 goadmin 계정을 만들 수 있습니다. password 파일은 /etc/go/passwd_auth 에 만들어 집니다.

sudo htpasswd -B -c /etc/go/passwd_auth goadmin

$ sudo htpasswd -B -c /etc/go/passwd_auth goadmin
New password: 
Re-type new password: 
Adding password for user goadmin

명령을 실행하면 password를 두 번 물어봅니다. 

아래처럼 -c 를 제거하고일반 유저로 사용할 tongchun 이라는 계정도 만들어 줍니다.

sudo htpasswd -B /etc/go/passwd_auth tongchun

 

이제 GoCD에서 htpasswd로 만든 password 파일을 참조하게 설정해야 합니다.

상단 메뉴에서 다시 Admin을 선택하고 Security 영역에 있는 Authorization Configurations를 클릭합니다.

오른쪽 위에 있는 Add 버튼을 클릭합니다.

Id는 users라고 입력했습니다. Plugin은 LDAP과 Password를 선택할 수 있는데 Password를 선택합니다.

Password File Authentication Plugin for GoCD

Password 파일 경로는 htpasswd로 만든 /etc/go/passwd_auth 경로를 넣습니다.

Check connection 버튼을 눌러 정상적으로 연결되는지 확인 후 Save 버튼을 클릭합니다.

 

Save 버튼을 클릭하면 아래와 같이 로그인 창이 뜹니다. goadmin 계정으로 로그인 해줍니다.

goadmin의 계정 로그인이 성고하면 아래와 같이 Authorization Configurations 화면이 나옵니다.

상단 Admin 텝에서 Users Management 로 이동합니다.

유저에 권한 설정을 해줘야 합니다. goadmin 계정에 System Admin 항목의 Toggle 버튼을 yes로 체크합니다.

그런데 goadmin과 같이 만들어 줬던 tongchun 계정은 보이지 않습니다.

htpasswd로 만들어준 계정을 추가하려면 오른쪽 상단의 Import User 버튼을 클릭해 추가할 수 있습니다.

GoCD Agent를 설치 합니다.

GoCD에서 Agent는 실제 task를 수행하게 됩니다. Pipeline을 실행하기 위해서는 하나 이상의 Agent가 있어야 합니다.

GoCD Server가 있는 서버에 설치하겠습니다. 아래 명령으로 간단히 설치할 수 있습니다.

$ sudo yum install -y go-agent

GoCD Agent를 시작합니다. 그리고 서버 재부팅 이후에도 자동으로 실행되도록 설정합니다.

$ sudo systemctl start go-agent
$ sudo systemctl enable go-agent

브라우저에서 GoCD에 접속하고 상단 메뉴에서 AGENTS 항목을 클릭해 확인합니다.

여기까지 GoCD의 설치와 기본 설정이었습니다.