如何在 Ubuntu 22.04 上安装和配置 GoCD
在此页
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装 GoCD
- 第 3 步 - 安装和配置 PostgreSQL
- 第 4 步 - 配置 GoCD
- 第 5 步 - 设置 GoCD 身份验证
- 第 6 步 - 安装 Nginx
- 第 7 步 - 安装 SSL
- 第 8 步 - 配置 Nginx
- 第 9 步 - 安装 GoCD 代理
- 结论
GoCD 是一个开源的持续交付和自动化系统。 GoCD 擅长对复杂的 CD 工作流程进行建模,以通过其建模构造、并行执行和依赖管理获得快速反馈。 GoCD 通过实时跟踪从提交到部署的每个更改来帮助您解决损坏的管道。 GoCD 让您轻松比较两个构建并部署您想要的应用程序的任何版本。 GoCD 生态系统由 GoCD 服务器和 GoCD 代理组成。 GoCD 控制一切,例如运行基于 Web 的用户界面以及管理和向代理提供作业。 Go 代理负责运行作业和部署。
本教程将教您在 Ubuntu 22.04 服务器上安装和配置 GoCD。
先决条件
-
A server running Ubuntu 22.04 with a minimum of 2GB of RAM.
-
A non-sudo user with root privileges.
-
The uncomplicated Firewall(UFW) is enabled and running.
-
Fully Qualified Domain Names(FQDN) pointing to your server. We will be using
gocd.example.com
for our tutorial. -
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
将 GoCDs 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 运行时 (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 shell。
$ 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 Shell。
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://
启动 GoCD 仪表板。要通过安全连接访问 GoCD 仪表板,请访问 URL https://
。忽略显示证书无效的错误。通过安全连接访问仪表板始终很重要。
您将获得以下页面。

在使用它之前,您应该配置 GoCD。从顶部导航栏前往管理 >> 服务器配置菜单。

在提供的字段中添加站点 URL,然后按“保存”按钮。

单击左侧菜单中的 Artifacts Management 选项,然后输入之前创建的 artifacts 目录的位置。选择选项允许自动清理工件管理空间并根据您的要求设置容量。完成后单击保存按钮。

但是,自动删除选项不会备份您的旧工件。要手动备份然后删除旧工件,请通过取消选中允许自动清理工件选项来禁用自动删除。
接下来,我们需要配置电子邮件选项以接收来自 GoCD 的电子邮件通知。

单击“发送测试电子邮件”按钮检查设置,然后单击“保存”按钮完成。
如果你想设置作业超时时间,你可以通过访问作业超时配置部分来实现。
重新启动 GoCD 服务器以应用更改。
$ sudo systemctl restart go-server
第 5 步 - 设置 GoCD 身份验证
默认情况下,任何人都可以访问 GoCD,但您可以使用密码文件或 LDAP 配置身份验证。在本教程中,我们将设置基于密码的身份验证。
安装 Apache 工具,以便我们可以使用 htpasswd
命令创建加密的密码文件。
$ 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 部分,然后单击密码文件列表中的 Edit 按钮。

选中仅允许已知用户登录选项。从现在开始,您需要通过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 存储库。
导入 Nginx 签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加 Nginx 稳定版本的存储库。
$ 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
我们需要安装 Certbot 来生成 SSL 证书。您可以使用 Ubuntu 存储库安装 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。如果您有任何问题,请在下面的评论中发表。