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

・19 分钟阅读

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

前提条件

  • CentOS 7服务器实例,至少有1GB RAM,
  • 一个sudo用户
  • 指向服务器的域名,

对于本教程,我们会使用192.168.1.1作为公共IP地址,并且使用gocd,example,com作为指向实例的域名,请确保会例子域名和IP地址全部替换为实际的。

使用向导更新基本系统如何更新Centos 7 ,系统更新后,继续安装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目录的路径设置JAVA_HOMEJRE_HOME环境变量。


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的唯一依赖,可以在yum的帮助下安装GoCD 将其正式知识库安装到系统中。


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软件建议使用额外的分区或驱动器来存储工件,在持续集成和交付平台中,经常生成工件。随着新工件不断产生,磁盘空间会逐渐减少,在某些阶段,系统会耗尽空闲磁盘空间,而且系统运行的服务会失败,为了解决这个问题,你可以附加一个新的块存储驱动器来存储工件,如果你仍然希望在同一个驱动器上存储工件,请跳到"设置防火墙"部分。

部署新的块存储驱动器并会它附加到你的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

现在你可以访问http ://192.168.1.1:8153上的GoCD Dashboard,,要在安全连接上访问GoCD仪表板请访问https ://192.168.1.1:8154 ,在显示证书无效时,会出现一些错误,你可以安全地忽略错误,因为证书是自签名的,出于安全考虑,你应该始终在安全连接上使用仪表板。

在设置新管道之前,请导航到" Admin >> Server Configuration "navigation顶部导航栏。

在"Site URL"字段中输入不安全站点的URL,在"Secure Site URL"字段中输入安全站点。

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

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

此外你可以配置GoCD自动删除旧工件,根据磁盘大小配置下一个选项,但是,自动删除选项不需要备份旧的工件,为了手动获取备份,然后删除旧的工件,请通过选择"Never"选项来禁用自动删除,",Auto delete old artifacts "选项"

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


sudo systemctl restart go-server

设置身份验证

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

注意:设置身份验证是一个可选步骤,但是,强烈建议用于面向公共的服务器如。

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


sudo yum -y install httpd-tools

使用Bcrypt encrypt命令创建密码文件。


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 "navigation顶部导航栏,点击Add按钮,并且提供一个标识,选择" Password File Authentication Plugin for GoCD "用于插件标识,并且直接指向口令文件的路径,现在单击" check connection "按钮以验证GoCD是否可以使用密码文件进行身份验证,

最后,保存身份验证方法,重新加载控制板,它会自动会你注销,你将看到一个登录屏幕,使用前面创建的凭据登录。

你需要手动升级管理员用户,否则,所有用户都会拥有管理员权限,导航到" Admin >> User Summary ""从顶部导航栏。

现在选择你创建的管理员用户,并单击"Roles"下拉列表,选择"Go System Administrator"复选框会用户提升为唯一的管理员。

要在密码文件中创建的GoCD中添加用户,请单击" add "按钮,并且搜索要添加用户的用户,,用户也会在第一次登录时自动添加到GoCD仪表板,显然,对于用户登录,必须会它们添加到我们先前创建的口令文件中。

使用加密SSL保护GoCD

默认情况下GoCD监听安全连接上的端口8153和8154,尽管端口8154提供了到应用程序的安全连接,但是,它还显示了浏览器错误,因为它使用自签署的证书,在本教程的这一部分,我们会安装和安全的Nginx,让我们加密免费的SSL证书,nginx Web服务器将作为反向代理将传入请求转发到GoCD的http endpoint,

安装Nginx 。


sudo yum -y install nginx

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


sudo systemctl start nginx
sudo systemctl enable nginx

安装Certbot这是让我们加密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

注意:要获得证书来加密towards,要生成证书的域必须指向服务器,如果不是,必须对域的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运行。如果证书到期到期,它将自动续订。

现在,更改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 http://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 http://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

现在你可以在https ://gocd,example,com访问GoCD仪表板,,使用管理员凭据登录到你的仪表板,并导航到",Admin >> Server Configuration "navigation顶部导航栏。

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

安装GoCD代理

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

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

因为我们已经会GoCD存储库导入到服务器中,所以可以直接安装go代理。


sudo yum install -y go-agent

现在,启动GoCD服务器,并且使它在系统启动时自动启动。


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

检测到时,将自动启用在localhost上运行的GoCD代理。

Zuoxiaojuan profile image