如何在CentOS 7上安装和配置GoCD

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

GoCD是一个开源的持续交付和自动化系统。它允许您使用并行和顺序执行为复杂的工作流建模。其价值流图使您可以轻松地轻松可视化复杂的工作流程。 GoCD使您可以轻松比较两个版本,并部署所需版本的应用程序。 GoCD生态系统由GoCD服务器和GoCD代理组成。 GoCD负责控制一切,例如运行基于Web的用户界面以及管理代理并向其提供作业。 Go代理负责运行作业和部署。

先决条件

具有至少1GB RAM的Vultr CentOS 7服务器实例。
sudo用户。
指向服务器的域名。

在本教程中,我们将使用 192.168.1.1 作为公共IP地址, gocd.example.com 域名指向Vultr实例。请确保将所有示例域名和IP地址替换为实际的域名和IP地址。

使用如何更新CentOS指南来更新基本系统。一旦系统更新完毕,请继续安装Java。

安装Java

GoCD需要Java版本8,并支持Oracle Java和OpenJDK。在本教程中,我们将从OpenJDK安装Java 8。

OpenJDK可以轻松安装,因为默认情况下该软件包可用 YUM 资料库。

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

如果正确安装了Java,则可以验证其版本。

java -version

您将获得与以下文本类似的输出。

[user@vultr ~]$ java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-b12)
OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)

在继续进行之前,我们需要设置 JAVA_HOMEJRE_HOME 环境变量。查找系统中Java可执行文件的绝对路径。

readlink -f $(which java)

以下文本将输出到您的终端。

[user@vultr ~]$ readlink -f $(which java)
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64/jre/bin/java

现在,将 JAVA_HOMEJRE_HOME 环境变量根据Java目录的路径。

echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64" >> ~/.bash_profile
echo "export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64/jre" >> ~/.bash_profile

注意: 确保使用系统上获得的Java路径。发布新版本的Java 8时,本教程中使用的路径可能会更改。

执行 bash_profile 文件。

source ~/.bash_profile

现在您可以运行 echo $JAVA_HOME 命令以确保设置了环境变量。

[user@vultr ~]$ echo $JAVA_HOME
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64

安装GoCD

GoCD是用Java编写的,因此Java是运行GoCD的唯一依赖项。 GoCD可以通过以下方式安装 YUM。将其正式存储库安装到系统中。

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

在系统中安装GoCD服务器。

sudo yum install -y go-server

启动GoCD并使其在启动时自动启动。

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

在访问GoCD仪表板之前,让我们创建一个新目录来存储工件。工件可以存储在安装了操作系统和应用程序的同一磁盘上。或者,您可以使用专用磁盘或块存储驱动器来存储工件。

如果您希望使用相同的磁盘来存储工件,则只需创建一个新目录并将所有权提供给GoCD用户即可。

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

配置块存储

GoCD软件建议使用其他分区或驱动器来存储工件。在持续的集成和交付平台中,经常会生成工件。连续生成新的工件时,磁盘空间会随着时间的推移而减少。在某个阶段,您的系统将耗尽可用磁盘空间,并且系统上运行的服务将失败。为解决此问题,您可以连接新的Vultr块存储驱动器以存储工件。如果仍然希望将工件存储在同一驱动器上,请跳至“设置防火墙”部分。

部署新的块存储驱动器 并将其附加到您的GoCD服务器实例。现在,在块存储设备上创建一个新分区。

sudo parted -s /dev/vdb mklabel gpt
sudo parted -s /dev/vdb unit mib mkpart primary 0% 100%

在新磁盘上创建文件系统。

sudo mkfs.ext4 /dev/vdb1

安装块存储驱动器。

sudo mkdir /mnt/artifacts
sudo cp /etc/fstab /etc/fstab.backup
echo "
/dev/vdb1 /mnt/artifacts ext4 defaults,noatime 0 0" | sudo tee -a /etc/fstab
sudo mount /mnt/artifacts

现在开始 df,您将看到新的块存储驱动器安装在 /mnt/artifacts

[user@vultr ~]$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda1       20616252 6313892  13237464  33% /

...
/dev/vdb1       10188052   36888   9610596   1% /mnt/artifacts

向GoCD用户提供目录的所有权。

sudo chown -R go:go /mnt/artifacts

设置防火墙

更改防火墙配置以允许端口 81538154 通过防火墙。港口 8153 侦听不安全的连接和端口 8154 用于安全连接。

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仪表板 https://192.168.1.1:8153。要通过安全连接访问GoCD仪表板,请访问 https://192.168.1.1:8154。您将得到一些错误,表明证书无效。您可以放心地忽略该错误,因为证书是自签名的。为了安全起见,应始终在安全连接上使用仪表板。

设置新管道之前,请导航至“Admin >> Server Configuration”(位于顶部导航栏中)。

在“Site URL“”中的“字段和安全站点”Secure Site URL”字段。

接下来,提供您的SMTP服务器详细信息,以从GoCD发送电子邮件通知。

最后,提供您想要存储工件的位置的路径。如果您选择将工件存储在与操作系统相同的磁盘上,请输入 /opt/artifacts;如果您选择附加块存储驱动器,则可以输入 /mnt/artifacts

此外,您可以将GoCD配置为自动删除旧的工件。根据您的磁盘大小配置下一个选项。但是,自动删除选项不会备份您的旧工件。要手动进行备份然后删除旧的工件,请通过选择“NeverAuto delete old artifacts“ 选项。

您将需要重新启动GoCD服务器,以便应用新的更改。

sudo systemctl restart go-server

设定验证

默认情况下,GoCD仪表板未配置为使用任何类型的身份验证,但它支持使用密码文件和LDAP的身份验证。在本教程中,我们将设置基于密码的身份验证。

注意:设置身份验证是一个可选步骤,但强烈建议将其面向面向公众的服务器,例如Vultr。

安装Apache工具,以便我们可以使用 htpasswd 命令来创建加密的密码文件。

sudo yum -y install httpd-tools

使用创建一个密码文件 htpasswd 使用Bcrypt加密的命令。

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

为用户提供两次密码。您将看到以下输出。

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

您可以使用上面的相同命令添加任意数量的用户,但删除 -c 选项。的 -c 选项将替换现有文件,用新用户替换旧用户。

sudo htpasswd -B /etc/go/passwd_auth gouser1

由于我们已经创建了密码文件,因此请再次访问GoCD仪表板。导航 ”Admin >> Security >> Authorization Configurations”从顶部导航栏。 Add 按钮并提供一个ID。选择“Password File Authentication Plugin for GoCD“,获取插件ID,然后将路径指向密码文件。现在,点击“Check Connection按钮以确认GoCD可以使用密码文件进行身份验证。

最后,保存身份验证方法。重新加载仪表板,它将自动将您注销。您现在将看到一个登录屏幕。使用之前创建的凭据登录。

您将需要手动提升管理员用户,否则,所有用户都将具有管理员权限。导航 ”Admin >> User Summary”(位于顶部导航栏中)。

现在,选择您创建的管理员用户,然后点击“Roles“下拉菜单。通过选择”Go System Administrator”复选框。

要在密码文件中创建的GoCD中添加用户,请点击“ADD按钮并搜索要添加的用户。用户在首次登录时也会自动添加到GoCD仪表板。显然,要使用户登录,必须将其添加到我们之前创建的密码文件中。

让我们加密SSL保护GoCD

默认情况下,GoCD侦听端口 81538154 在安全连接上。虽然港口 8154 提供与应用程序的安全连接,并且在使用自签名证书时还显示浏览器错误。在本教程的这一部分中,我们将使用Let’s Encrypt免费SSL证书安装并保护Nginx。 Nginx Web服务器将充当反向代理,将传入的请求转发到GoCD的 HTTP 端点。

安装Nginx。

sudo yum -y install nginx

启动Nginx并使它能够在启动时自动启动。

sudo systemctl start nginx
sudo systemctl enable nginx

安装Certbot,这是Let’s Encrypt CA的客户端应用程序。

sudo yum -y install certbot

在请求证书之前,您需要允许端口 80443或标准 HTTPHTTPS 服务,通过防火墙。另外,卸下端口 8153,它侦听不安全的连接。

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --zone=public --remove-port=8153/tcp --permanent
sudo firewall-cmd --reload

注意注意:要从Let’s Encrypt CA获取证书,必须为其生成证书的域指向服务器。如果不是,请对域的DNS记录进行必要的更改,然后等待DNS传播,然后再次发出证书请求。 Certbot在提供证书之前会检查域权限。

生成SSL证书。

sudo certbot certonly --webroot -w /usr/share/nginx/html -d gocd.example.com

生成的证书可能存储在 /etc/letsencrypt/live/gocd.example.com/。 SSL证书将存储为 fullchain.pem 并且私钥将存储为 privkey.pem

让我们加密证书在90天后过期,因此建议您使用cron作业设置证书的自动续订。

打开cron作业文件。

sudo crontab -e

将以下行添加到文件末尾。

30 5 * * * /usr/bin/certbot renew --quiet

上面的cron作业将每天5:30 AM运行。如果证书到期,它将自动更新。

现在,更改Nginx默认配置文件以取出 default_server 线。

sudo sed -i 's/default_server//g' /etc/nginx/nginx.conf

为GoCD Web界面创建一个新的配置文件。

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

填充文件。

upstream gocd {
server 127.0.0.1:8153;
}

server {
    listen 80 default_server;
    server_name gocd.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 default_server;
    server_name gocd.example.com;

    ssl_certificate           /etc/letsencrypt/live/gocd.example.com/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/gocd.example.com/privkey.pem;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

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

location / {
        proxy_pass https://gocd;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
    }
location /go {
    proxy_pass https://gocd/go;
    proxy_http_version 1.1;
    proxy_set_header Upgrade websocket;
    proxy_set_header Connection upgrade;
    proxy_read_timeout 86400;
    }
  }

检查新配置文件中的错误。

sudo nginx -t

如果看到以下输出,则说明配置没有错误。

[user@vultr ~]$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果收到某种错误,请确保仔细检查SSL证书的路径。重新启动Nginx Web服务器以实现配置更改。

sudo systemctl restart nginx

现在,您可以在以下位置访问GoCD仪表板 https://gocd.example.com。使用管理员凭据登录到信息中心,然后导航至“Admin >> Server Configuration”(位于顶部导航栏中)。

设置“Site URL“和”Secure Site URL“ 至 https://gocd.example.com。港口 8154 仍然需要通过防火墙进行访问,以便远程代理可以通过端口连接到服务器 8154,以防他们无法通过标准连接 HTTP 港口。

安装GoCD代理

在GoCD持续集成环境中,GoCD代理是负责执行所有任务的工作人员。当检测到源更改时,将触发管道,并将作业分配给可用的工作程序以执行。然后,代理执行任务并在执行后报告最终状态。

要运行管道,必须至少配置一个代理。继续在GoCD服务器上安装GoCD代理。

由于我们已经将GoCD存储库导入到服务器中,因此我们可以直接安装Go Agent。

sudo yum install -y go-agent

现在,启动GoCD服务器,并使它能够在引导时自动启动。

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

检测到本地主机上运行的GoCD代理会自动启用。

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com