Làm thế nào để xây dựng máy chủ TeamCity và áp dụng vào Business của bạn

Trong một cam kết với bản thân, tôi đã đặt hàng mình bài viết về: làm thế nào để xây dựng máy chủ TeamCity và áp dụng vào Business của bạn. Trong loạt bài naỳ - với kinh nghiệm thực tế của bản thân - tôi sẽ hướng dẫn bạn cách thức cài đặt, vận hành máy chủ TeamCity, cách để nó tương tác với các thành phần và bộ phận khác trong công ty để đem lại giá trị.

Lưu ý: bài viết này là thực tế ở đơn vị tôi đang làm việc, có thể nó không đúng, không khớp với bạn. Sau cùng, hãy chia sẻ nhiều hơn để mở rộng kiến thức. Cám ơn bạn rất nhiều vì sự quan tâm.

(bài đang được viết)

Bước 1: đi tới home và tạo thư mục TeamCity. Đây là nơi chứa gói cài đặt TeamCity
cd /home/
mkdir TeamCity

Bước 2: tôi download gói cài đặt TeamCity từ trang chủ https://www.jetbrains.com/teamcity/download/. Sau download, tôi giải nén nó.
tar -xvzf TeamCity-10.0.4.tar.gz

Bước 3: đi vào thư mục chứa file chạy TeamCity như dưới đây
cd /home/TeamCity/bin/
./runAll.sh stop #stop TeamCity
./runAll.sh start #start TeamCity
netstat -taln | grep 9090 #kiểm tra TeamCity đang chạy trên port mặc định không?

Bước 4: tạo tài khoản teamcity, đây là tài khoản dành riêng để thực thi TeamCity. Mục đích để riêng rẽ TeamCity với các tài khoản khác đã tồn tại trên hệ thống, giúp minh bạch về quản lý, an toàn tài khoản và thông tin.
usermod -d /home/TeamCity -s /bin/bash teamcity

Để cẩn thận, tôi kiểm tra lại tài khoản TeamCity đã tồn tại.
[[email protected] ~]$ cat /etc/passwd | grep teamcity teamcity:x:517:517::/home/TeamCity:/bin/bash

Bước 5: phân quyền cho tài khoản teamcity là chủ (owner) của thư mục chứa gói cài đặt TeamCity
chown -R teamcity.teamcity /home/TeamCity

Bước 6: TeamCity cần Java làm môi trường chạy, vậy nên tôi sẽ khai báo môi trường Java
Gói cài đặt Java của tôi ở đường dẫn
drwxr-xr-x 8 root root 4096 Jun 12 16:35 jdk8
lrwxrwxrwx 1 root root 5 Jun 12 16:36 jdk -> jdk8/
[[email protected] ~]$ vim ~/.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then  
        . ~/.bashrc
fi

# User specific environment and startup programs

export JAVA_HOME=/opt/jdk  
export PATH=$PATH:$JAVA_HOME/bin  

Bước 7: cài đặt và cấu hình mysql server
yum install mysql /etc/init.d/mysqld start mysql -uroot
mysql_secure_installation

Bước 8: tạo database dành riêng cho teamcity, tạo người dùng teamcity và phân quyền.
create database teamcity character set UTF8 collate utf8_bin;
USE teamcity
create user 'teamcityuser'@'localhost' identified by '<password>';
grant all privileges on teamcity.* to 'teamcityuser'@'localhost';

mysql> show databases;  
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| teamcity           |
+--------------------+
3 rows in set (0.00 sec)  

Bước 9: cấu hình TeamCity sử dụng MySQL
Bạn cần download mysql-connector-java-5.1.42-bin.jar tại trang Download Connector của MySQL
mv mysql-connector-java-5.1.42-bin.jar /home/TeamCity/.BuildServer/lib/jdbc/
chown teamcity.teamcity mysql-connector-java-5.1.42-bin.jar

Bước 10: cấu hình Nginx làm reverse proxy cho TeamCity
Trước tiên, tôi cần kiểm tra connector port của TeamCity

vim /home/TeamCity/conf/server.xml

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8111" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="60000"
               redirectPort="8543"
               useBodyEncodingForURI="true"
               socket.txBufSize="64000"
               socket.rxBufSize="64000"
               tcpNoDelay="1"
        />


Tôi thấy, connector port là 8111.

Tiếp theo, tôi cấu hình reverse proxy cho Nginx

#
# The default server
#

server {  
    listen      80;
    server_name  www.teamcity.bozo.vn teamcity.bozo.vn;
    include /etc/nginx/default.d/*.conf;

    location / {
        proxy_buffers 16 4k;
        proxy_buffer_size 2k;
        proxy_set_header X-Forwarded-Host   $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        set_real_ip_from                    127.0.0.1;
        real_ip_header                      X-Forwarded-For;
        proxy_pass                          http://localhost:8111;
    }
#    location / {
#        root   /usr/share/nginx/html;
#        index  index.html index.htm;
#    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}


Bước 11: chạy TeamCity
cd /home/TeamCity/bin/
./runAll.sh start

Bước 12: vào TeamCity trên trình duyệt http://teamcity.bozo.vn. Tôi bắt đầu bước cấu hình Database connection setup.

  • Select the database type, chọn MySQL
  • Tại đây, nhập các thông số cấu hình của MySQL đã làm ở Bước 8, bao gồm: Database host[:port], Database name, User name, Password
  • Nhấp chọn nút Proceed để tiếp tục.
  • Cần chờ một lúc để TeamCity khởi tạo các tham số cấu hình cần thiết.

Bước 13: Sau khi khởi tạo xong, màn hình Create Administrator Account xuất hiện, tôi tạo tài khoản quản trị cho mình.

Sau khi đăng nhập vào TeamCity, nếu bạn không thấy có cảnh báo nào xuất hiện - chúc mừng - bạn đã cài đặt TeamCity thành công, không một vết gợn. Nếu có cảnh báo xuất hiện - đó là lý do tôi ở đây để giúp bạn - vui lòng đọc tiếp phần 2 của bài viết.

Cấu hình SSL cho TeamCity

Nếu bạn tạo 01 SSL với Letsencrypt, bạn cần cấu hình SSL cho Nginx Reverse Proxy như dưới đây:

#
# The default server
#

server {  
    listen       80;
    server_name  www.teamcity.bozo.vn teamcity.bozo.vn;
    location / {
        rewrite ^ https://teamcity.bozo.vn$request_uri? permanent;
        }
}

server {  
#    listen      80;
    listen       443;
    server_name  www.teamcity.bozo.vn teamcity.bozo.vn;
    include /etc/nginx/default.d/*.conf;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.teamcity.bozo.vn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.teamcity.bozo.vn/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/www.teamcity.bozo.vn/chain.pem;
    ssl_protocols TLSv1.1 TLSv1.2;

    location / {
        proxy_buffers 16 4k;
        proxy_buffer_size 2k;
        proxy_set_header X-Forwarded-Host   $host;
        proxy_set_header X-Real-IP          $remote_addr;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        set_real_ip_from                    127.0.0.1;
        real_ip_header                      X-Forwarded-For;
        proxy_pass                          
        http://localhost:8111;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Kết luận

Trong bài viết này, tôi đã hướng dẫn bạn cách xây dựng máy chủ TeamCity. Nếu bạn là người mới bắt đầu với TeamCity, tôi có niềm tin bài viết giúp ích cho bạn. Tôi rất vui khi bạn đọc tới đây.

Lời cám ơn

Tôi cám ơn bạn đã dành thời gian để đọc bài viết này. Tất nhiên, tôi luôn quan tâm đến hoàn thiện chất lượng bài viết, vì vậy mọi sự đóng góp của bạn là sự khích lệ đối với tôi.

Bài viết thể hiện quan điểm, văn phong của tác giả. Mọi sự tranh luận, phản biện được khuyến khích. Và tôi bảo lưu mọi quan điểm cho đến khi mọi thứ được sáng tỏ trên cơ sở sự chính xác của thông tin.

Tài liệu tham khảo

Để viết bài này, tôi đã sử dụng các tài liệu tham khảo
http://blog.fire-development.com/2014/09/23/teamcity-8-setup-on-linux/
http://coderscoffeehouse.com/tech/2017/04/07/teamcity-linux-setup.html

Tien Phan

Read more posts by this author.

Subscribe to

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!