웹사이트 검색

Ubuntu 22.04에서 GoCD를 설치 및 구성하는 방법


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - GoCD 설치
  4. 3단계 - PostgreSQL 설치 및 구성
  5. 4단계 - GoCD 구성
  6. 5단계 - GoCD 인증 설정
  7. 6단계 - Nginx 설치
  8. 7단계 - SSL 설치
  9. 8단계 - Nginx 구성
  10. 9단계 - GoCD 에이전트 설치
  11. 결론

GoCD는 오픈 소스 지속적 전달 및 자동화 시스템입니다. GoCD는 모델링 구성, 병렬 실행 및 종속성 관리를 통해 빠른 피드백을 위한 복잡한 CD 워크플로 모델링에 탁월합니다. GoCD는 커밋에서 배포까지의 모든 변경 사항을 실시간으로 추적하여 중단된 파이프라인 문제를 해결하는 데 도움이 됩니다. GoCD를 사용하면 두 빌드를 쉽게 비교하고 원하는 애플리케이션 버전을 배포할 수 있습니다. GoCD 생태계는 GoCD 서버와 GoCD 에이전트로 구성됩니다. GoCD는 웹 기반 사용자 인터페이스 실행, 에이전트에 대한 작업 관리 및 제공과 같은 모든 것을 제어합니다. Go 에이전트는 작업 및 배포 실행을 담당합니다.

이 튜토리얼은 Ubuntu 22.04 서버에서 GoCD를 설치하고 구성하는 방법을 알려줍니다.

전제 조건

  1. A server running Ubuntu 22.04 with a minimum of 2GB of RAM.

  2. A non-sudo user with root privileges.

  3. The uncomplicated Firewall(UFW) is enabled and running.

  4. Fully Qualified Domain Names(FQDN) pointing to your server. We will be using gocd.example.com for our tutorial.

  5. Ensure that everything is updated.

    $ sudo apt update && sudo apt upgrade
    

1단계 - 방화벽 구성

패키지를 설치하기 전에 첫 번째 단계는 HTTP, HTTPS 및 Synapse용 포트를 열도록 방화벽을 구성하는 것입니다.

방화벽의 상태를 확인하십시오.

$ sudo ufw status

다음과 같은 내용이 표시되어야 합니다.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

방화벽에서 HTTP, HTTPS 및 GoCD 포트를 엽니다.

$ sudo ufw allow 8153
$ sudo ufw allow http
$ sudo ufw allow https

상태를 다시 확인하여 확인하십시오.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
8153                       ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
8153 (v6)                  ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

2단계 - GoCD 설치

GoCD GPG 키를 시스템으로 가져옵니다.

$ curl https://download.gocd.org/GOCD-GPG-KEY.asc | gpg --dearmor | sudo tee /usr/share/keyrings/gocd.gpg > /dev/null 2>&1

시스템에 GoCD 리포지토리를 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/gocd.gpg] https://download.gocd.org /" | sudo tee /etc/apt/sources.list.d/gocd.list

시스템 저장소 목록을 업데이트합니다.

$ sudo apt update

GoCD를 설치합니다. 이렇게 하면 GoCD를 실행하는 데 필요한 Java Runtime(JRE)의 최신 호환 버전도 설치됩니다.

$ sudo apt install -y go-server

다음 단계로 진행하기 전에 아티팩트를 저장할 디렉터리를 생성해야 합니다. 아티팩트는 서버가 설치된 동일한 디스크나 전용 디스크 또는 블록 스토리지 드라이브에 저장할 수 있습니다. 이 자습서에서는 동일한 디스크에 저장합니다.

아티팩트를 저장할 디렉터리를 만듭니다.

$ sudo mkdir /opt/artifacts

아티팩트 디렉터리에 GoCD 소유권을 부여합니다.

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

3단계 - PostgreSQL 설치 및 구성

GoCD는 기본적으로 구성이 필요하지 않은 H2 데이터베이스와 함께 제공됩니다. 프로덕션 환경에서 GoCD를 사용하는 경우 PostgreSQL을 권장합니다.

Ubuntu 22.04는 이전 버전의 PostgreSQL과 함께 제공됩니다. 튜토리얼을 위해 Postgres 15를 설치합니다.

PostgreSQL용 리포지토리를 설치합니다.

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

PostgreSQL GPG 키를 가져옵니다.

$ curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null

시스템 저장소 목록을 업데이트하십시오.

$ sudo apt update

PostgreSQL 15 서버를 설치합니다.

$ sudo apt install -y postgresql postgresql-contrib

서비스 상태를 확인합니다.

$ sudo systemctl status postgresql
? postgresql.service - PostgreSQL RDBMS
     Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2022-12-19 06:49:50 UTC; 2h 26min ago
   Main PID: 3536 (code=exited, status=0/SUCCESS)
        CPU: 1ms

Dec 19 06:49:50 gocd systemd[1]: Starting PostgreSQL RDBMS...
Dec 19 06:49:50 gocd systemd[1]: Finished PostgreSQL RDBMS.

PostgreSQL 셸에 로그인합니다.

$ sudo -i -u postgres psql

GoCD용 새 데이터베이스를 만듭니다.

postgres=# CREATE DATABASE "gocd" ENCODING="UTF8" TEMPLATE="template0";

강력한 암호로 새 데이터베이스 사용자를 생성합니다.

postgres=# CREATE ROLE "gocd_database_user" PASSWORD 'gocd_database_password' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

사용자에게 데이터베이스를 사용할 수 있는 권한을 부여합니다.

postgres=# GRANT ALL PRIVILEGES ON DATABASE "gocd" TO "gocd_database_user";

사용자에게 슈퍼유저 권한을 부여합니다. 데이터베이스 사용자는 GoCD 서버를 처음 시작할 때만 수퍼유저 권한이 필요합니다. pgcrypto 및 citext 확장을 처음에 생성해야 하므로 이 작업을 수행해야 합니다. 수퍼유저 권한은 더 이상 필요하지 않으므로 GoCD 서버를 처음 시작한 후에 취소할 수 있습니다.

postgres-=# ALTER ROLE "gocd_database_user" SUPERUSER;

Postgres 셸을 종료합니다.

postgres=# \q

GoCD용 PostgreSQL 구성의 마지막 단계는 데이터베이스 자격 증명을 GoCD 서버 구성 디렉터리에 저장하는 것입니다.

db.properties 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/go/db.properties

다음 코드를 붙여넣습니다.

db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://localhost:5432/gocd
db.user=gocd_database_user
db.password=gocd_database_password

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

4단계 - GoCD 구성

GoCD를 구성하기 전에 GoCD 서버를 시작해야 합니다.

GoCD 서버를 시작합니다.

$ sudo systemctl start go-server

서버의 상태를 확인하십시오.

$ sudo systemctl status go-server
? go-server.service - go-server
     Loaded: loaded (/etc/systemd/system/go-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-12-15 08:53:10 UTC; 8s ago
    Process: 8475 ExecStart=/usr/share/go-server/bin/go-server start sysd (code=exited, status=0/SUCCESS)
   Main PID: 8541 (wrapper-linux-x)
      Tasks: 43 (limit: 2237)
     Memory: 566.7M
        CPU: 11.873s
     CGroup: /system.slice/go-server.service
             ??8541 /usr/share/go-server/bin/../wrapper/wrapper-linux-x86-64 /usr/share/go-server/wrapper-config/wrapper.conf wrapper.syslog.ident=go-server wrapper.pidfile=/var/lib/go-server/run/go-server.pi>
             ??8556 /usr/share/go-server/jre/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED -Xms512m -Xmx1024m -XX:MaxMetaspaceSize=400m .....

URL http://:8153/을 방문하여 GoCD 대시보드를 시작합니다. 보안 연결을 통해 GoCD 대시보드에 액세스하려면 URL https://:8154를 방문하십시오. 인증서가 유효하지 않음을 나타내는 오류를 무시하십시오. 보안 연결을 통해 대시보드에 액세스하는 것이 항상 중요합니다.

다음 페이지가 나타납니다.

사용하기 전에 GoCD를 구성해야 합니다. 상단 탐색 모음에서 관리 >> 서버 구성 메뉴로 이동합니다.

제공된 필드에 사이트 URL을 추가하고 저장 버튼을 누릅니다.

왼쪽 메뉴에서 Artifacts Management 옵션을 클릭하고 이전에 생성한 artifacts 디렉터리의 위치를 입력합니다. 요구 사항에 따라 공간을 관리하고 용량을 설정하기 위해 자동 정리 아티팩트 허용 옵션을 선택합니다. 완료되면 저장 버튼을 클릭합니다.

그러나 자동 삭제 옵션은 이전 아티팩트를 백업하지 않습니다. 수동으로 백업을 수행한 다음 이전 아티팩트를 삭제하려면 아티팩트 자동 정리 허용 옵션을 선택 취소하여 자동 삭제를 비활성화하십시오.

다음으로 GoCD에서 이메일 알림을 수신하도록 이메일 옵션을 구성해야 합니다.

테스트 이메일 보내기 버튼을 클릭하여 설정을 확인한 후 저장 버튼을 클릭하여 완료합니다.

작업 제한 시간을 설정하려면 작업 제한 시간 구성 섹션을 방문하면 됩니다.

변경 사항을 적용하려면 GoCD 서버를 다시 시작하십시오.

$ sudo systemctl restart go-server

5단계 - GoCD 인증 설정

기본적으로 GoCD는 누구나 액세스할 수 있지만 암호 파일 또는 LDAP를 사용하여 인증을 구성할 수 있습니다. 이 자습서에서는 암호 기반 인증을 설정합니다.

htpasswd 명령을 사용하여 암호화된 암호 파일을 만들 수 있도록 Apache 도구를 설치합니다.

$ sudo apt install apache2-utils

Bcrypt 인증을 사용하여 암호 파일을 만듭니다. -c 플래그는 새 파일을 만들고 -B 플래그는 Bcrypt 인증을 설정하고 goadmin 사용자 이름입니다.

$ sudo htpasswd -B -c /etc/go/passwd_auth navjot

프롬프트가 표시되면 비밀번호를 제공하십시오.

New password:
Re-type new password:
Adding password for user navjot

동일한 명령을 사용하여 여러 사용자를 추가할 수 있지만 파일이 이미 존재하므로 -c 플래그를 제거하십시오. -c 플래그를 다시 사용하면 기존 파일을 덮어쓰고 기존 사용자를 새 사용자로 바꿉니다.

$ sudo htpasswd -B /etc/go/passwd_auth gouser1

인증의 다음 단계는 GoCD 백엔드에서 비밀번호 위치를 구성하는 것입니다. 상단 탐색 모음에서 관리 >> 보안 >> 인증 구성 섹션을 방문합니다.

추가 버튼을 클릭하고 ID를 제공하십시오. 드롭다운 메뉴에서 플러그인 ID로 GoCD용 암호 파일 인증 플러그인을 선택하고 암호 파일의 경로를 입력합니다. 그런 다음 연결 확인 버튼을 클릭하여 GoCD가 인증을 위해 파일에 액세스할 수 있는지 확인합니다.

첫 번째 사용자의 경우 알려진 사용자만 로그인할 수 있도록 허용 옵션을 선택하지 않은 상태로 유지합니다. 저장 버튼을 클릭하여 마칩니다.

곧 GoCD를 새로 고치라는 메시지가 표시되고 로그인 페이지로 이동합니다.

앞에서 만든 자격 증명을 입력하고 로그인 버튼을 눌러 계속 진행합니다. 상단 탐색 모음에서 관리 >> 보안 >> 사용자 관리 섹션을 방문하십시오.

사용자를 관리자로 표시하려면 SYSTEM ADMIN 상자를 선택하십시오. 이제 Admin >> Security >> Authorization Configuration 섹션으로 돌아가서 비밀번호 파일 목록에서 편집 버튼을 클릭합니다.

알려진 사용자만 로그인 허용 옵션을 선택합니다. 이제부터는 htpasswd 파일을 통해 새 사용자를 생성한 다음 서버 페이지에서 먼저 가져와야 합니다.

두 번째 사용자를 생성해 보겠습니다.

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

상단 탐색 메뉴에서 관리 >> 보안 >> 사용자 관리 섹션을 방문하고 사용자 가져오기 버튼을 클릭합니다. 사용자를 검색하려면 사용자 이름 gouser1을 입력하십시오.

사용자를 선택하고 가져오기 버튼을 클릭하여 사용자를 추가합니다.

이제 두 번째 사용자로도 로그인할 수 있습니다. 더 많은 사용자를 위해 프로세스를 반복합니다.

6단계 - Nginx 설치

Ubuntu 22.04는 이전 버전의 Nginx와 함께 제공됩니다. 최신 버전을 설치하려면 공식 Nginx 저장소를 다운로드해야 합니다.

Nginxs 서명 키를 가져옵니다.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Nginxs 안정 버전용 리포지토리를 추가합니다.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

시스템 리포지토리를 업데이트합니다.

$ sudo apt update

Nginx를 설치합니다.

$ sudo apt install nginx

설치를 확인하십시오.

$ nginx -v
nginx version: nginx/1.22.1

Nginx 서버를 시작합니다.

$ sudo systemctl start nginx

7단계 - SSL 설치

SSL 인증서를 생성하려면 Certbot을 설치해야 합니다. Ubuntus 저장소를 사용하여 Certbot을 설치하거나 Snapd 도구를 사용하여 최신 버전을 가져올 수 있습니다. 우리는 Snapd 버전을 사용할 것입니다.

Ubuntu 22.04는 기본적으로 Snapd가 설치된 상태로 제공됩니다. 다음 명령을 실행하여 Snapd 버전이 최신인지 확인하십시오.

$ sudo snap install core
$ sudo snap refresh core

Certbot을 설치합니다.

$ sudo snap install --classic certbot

다음 명령을 사용하여 /usr/bin 디렉토리에 대한 심볼릭 링크를 생성하여 Certbot 명령을 실행할 수 있는지 확인하십시오.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

다음 명령을 실행하여 SSL 인증서를 생성하십시오.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d gocd.example.com

위의 명령은 서버의 /etc/letsencrypt/live/gocd.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

SSL 갱신이 제대로 작동하는지 확인하려면 프로세스를 테스트 실행하십시오.

$ sudo certbot renew --dry-run

오류가 표시되지 않으면 모든 설정이 완료된 것입니다. 인증서가 자동으로 갱신됩니다.

8단계 - Nginx 구성

편집을 위해 /etc/nginx/nginx.conf 파일을 엽니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size  64;

Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

편집을 위해 /etc/nginx/conf.d/gocd.conf 파일을 만들고 엽니다.

$ sudo nano /etc/nginx/conf.d/gocd.conf

다음 코드를 붙여넣습니다.

server {
  # Redirect any http requests to https
  listen         80;
  listen         [::]:80;
  server_name    gocd.example.com;
  return 301     https://$host$request_uri;
}

map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
  listen                    443 ssl http2;
  listen                    [::]:443 ssl http2;
  server_name               gocd.example.com;

  access_log                /var/log/nginx/gocd.access.log;
  error_log                 /var/log/nginx/gocd.error.log;

  # TLS configuration
  ssl_certificate           /etc/letsencrypt/live/gocd.example.com/fullchain.pem;
  ssl_certificate_key       /etc/letsencrypt/live/gocd.example.com/privkey.pem;
  ssl_trusted_certificate   /etc/letsencrypt/live/gocd.example.com/chain.pem;
  ssl_protocols             TLSv1.2 TLSv1.3;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_session_cache         shared:SSL:50m;
  ssl_session_timeout       1d;

  # OCSP Stapling ---
  # fetch OCSP records from URL in ssl_certificate and cache them
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  # Proxy everything over to the GoCD server
  location / {
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_http_version      1.1;
    proxy_set_header        Upgrade $http_upgrade;
    proxy_set_header        Connection $connection_upgrade;
    proxy_pass              http://localhost:8153/;

    # To be able to upload artifacts larger than default size of 1mb, ensure that you set this up to a large value.
    # setting to `0` will disable checking for body size.
    # See https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size
    client_max_body_size  10000m;

    # If you are intending to allow downloading of large artifacts (> 1GB) from GoCD you may need to adjust one of the
    # following two proxy buffering settings to prevent downloads failing for slow clients due to server idle timeouts.
    #
    # See https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering
    #
    # 1) disable the buffering of responses entirely (enabled by default on NGINX) OR
    # proxy_buffering off;
    #
    # 2) increase the max temporary file size (setting to `0` will disable the limit)
    # proxy_max_temp_file_size 2048m;
  }
}

완료되면 Ctrl + X를 누르고 프롬프트가 표시되면 Y를 입력하여 파일을 저장합니다.

Nginx 구성 파일 구문을 확인합니다.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginx 서비스를 다시 시작합니다.

$ sudo systemctl restart nginx

이제 URL https://gocd.example.com을 통해 GoCD 대시보드에 액세스할 수 있습니다.

9단계 - GoCD 에이전트 설치

GoCD 에이전트는 모든 작업의 실행을 담당하는 작업자입니다. 소스의 변경 사항이 감지되면 파이프라인이 트리거되고 실행을 위해 사용 가능한 작업자에게 작업이 할당됩니다. 그런 다음 에이전트는 작업을 실행하고 실행 후 최종 상태를 보고합니다.

파이프라인을 실행하려면 하나 이상의 에이전트를 구성해야 합니다. GoCD 서버에 GoCD 에이전트를 설치해 보겠습니다.

이미 GoCD 리포지토리를 가져왔으므로 GoCD 에이전트를 직접 설치합니다.

$ sudo apt install go-agent

GoCD 에이전트 서비스를 시작합니다.

$ sudo systemctl start go-agent

GoCD 대시보드에서 에이전트 탭을 방문하면 에이전트가 나열되고 자동으로 활성화되는 것을 볼 수 있습니다.

여기에서 GoCD CI/CD 서비스 사용을 시작할 수 있습니다.

결론

이것으로 Ubuntu 22.04 서버에서 GoCD를 설치하고 구성하는 방법을 배웠던 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.