注:本教程在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_HOME
和 JRE_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_HOME
和 JRE_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
设置防火墙
更改防火墙配置以允许端口 8153
和 8154
通过防火墙。港口 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配置为自动删除旧的工件。根据您的磁盘大小配置下一个选项。但是,自动删除选项不会备份您的旧工件。要手动进行备份然后删除旧的工件,请通过选择“Never
“Auto 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侦听端口 8153
和 8154
在安全连接上。虽然港口 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
在请求证书之前,您需要允许端口 80
和 443
或标准 HTTP
和 HTTPS
服务,通过防火墙。另外,卸下端口 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