如何在CentOS 7上安装和配置Concourse CI

介绍

持续集成是一种DevOps软件开发实践,使开发人员每天可以多次频繁地将修改后的代码合并到共享存储库中。每次合并后,将执行自动构建和测试以检测代码中的问题。它使开发人员能够快速发现并解决错误,从而提高软件质量并提供连续的软件交付。从Concourse来回切换非常容易,因为它将所有配置保留在声明性文件中,可以将其检入版本控制中。它还提供了一个Web用户界面,可交互显示构建信息。

大堂组件。
  • ATC是会议大厅的主要组成部分。它负责运行Web UI和API。它还负责所有的管道调度。
  • TSA是定制的SSH服务器。它负责向ATC安全地注册工人。
  • 工人还运行两种不同的服务:
    1. Garden是一个容器运行时,是一个接口,用于在工作人员上远程协调容器。
    2. Baggageclaim是一个缓存和工件管理服务器。
  • Fly是一个命令行界面,用于与ATC进行交互以配置Concourse Pipelines。

先决条件

确保用实际的Vultr公共IP地址和实际域名替换所有出现的192.0.2.1ci.example.com

使用指南如何更新CentOS 7更新基本系统。系统更新后,继续安装PostgreSQL。

安装和配置PostgreSQL数据库

PostgreSQL是一个对象关系数据库系统。Concourse将其管道数据存储到PostgreSQL数据库中。添加PostgreSQL存储库。

sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

安装PostgreSQL数据库服务器。

sudo yum -y install postgresql96-server postgresql96-contrib

初始化数据库。

sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb

initdb创建一个新的PostgreSQL数据库集群,该���群是由单个服务器实例管理的数据库的集合。编辑pg_hba.conf文件以启用基于MD5的身份验证。

sudo nano /var/lib/pgsql/9.6/data/pg_hba.conf

找到以下行并改变值peeridentMETHODtrustmd5分别。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

更新后,配置应如下所示。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

启动PostgreSQL服务器,并使其在启动时自动启动。

sudo systemctl start postgresql-9.6
sudo systemctl enable postgresql-9.6

更改默认PostgreSQL用户的密码。

sudo passwd postgres

以PostgreSQL用户身份登录:

sudo su - postgres

为Concourse CI创建一个新的PostgreSQL用户。

createuser concourse

注意可以使用默认的PostgreSQL用户对数据库进行身份验证,但是建议在生产设置中使用专用的用户对Concourse数据库进行身份验证。

PostgreSQL提供了一个外壳程序来在数据库上运行查询。通过运行以下命令切换到PostgreSQL shell:

psql

为新创建的Concourse数据库用户设置密码。

ALTER USER concourse WITH ENCRYPTED password 'DBPassword';

重要提示:替换DBPassword为强密码。记下密码,因为稍后在本教程中将需要输入密码。

为Concourse创建一个新的数据库。

CREATE DATABASE concourse OWNER concourse;

退出psql外壳。

\q

从当前的postgres用户切换到sudo用户。

exit

下载并安装Concourse CI

下载最新版本的Concourse可执行文件并将其存储在其中,/usr/bin以便可以直接执行。可在Concourse下载页面上找到最新版本的Concourse和Fly二进制文件。新版本非常频繁。将下面的链接替换为最新版本的新链接。

sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/concourse_linux_amd64 -O /usr/bin/concourse

同样,下载最新版本的fly可执行文件并将其存储在中/usr/bin

sudo wget https://github.com/concourse/concourse/releases/download/v3.4.1/fly_linux_amd64 -O /usr/bin/fly

Fly是用于连接到Concourse CI的ATC API的命令行界面。Fly可用于多种平台,例如Linux,Windows和MacOS。

分配执行权限下载concoursefly二进制文件。

sudo chmod +x /usr/bin/concourse /usr/bin/fly

通过检查其版本来检查Concourse和Fly是否正常工作。

concourse -version
fly -version

生成并设置RSA密钥

RSA密钥对提供了一种加密场所组件之间的通信的方法。

为了使Concourse正常工作,必须至少生成三对密钥。为了加密会话数据,请生成一个session_signing_key。TSA还将使用此密钥对它向ATC发出的请求进行签名。要保护TSA SSH服务器,请生成一个tsa_host_key。最后,worker_key每个工人生成一个。

创建一个新目录来存储与Concourse CI相关的键和配置。

sudo mkdir /opt/concourse

生成所需的密钥。

sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/session_signing_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/tsa_host_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/worker_key

通过将其内容复制到authorized_worker_keys文件来授权工人的公共密钥:

sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys

出发大厅

Concourse提供了两个需要启动的独立组件,即Web和worker。启动Concourse网站。

sudo concourse web \
  --basic-auth-username admin \
  --basic-auth-password StrongPass \
  --session-signing-key /opt/concourse/session_signing_key \
  --tsa-host-key /opt/concourse/tsa_host_key \
  --tsa-authorized-keys /opt/concourse/authorized_worker_keys \
  --postgres-user=concourse \
  --postgres-password=DBPassword \
  --postgres-database=concourse \
  --external-url http://192.0.2.1:8080

basic-auth如果需要,请更改的用户名和密码。确保密钥文件的路径正确,并确保在PostgreSQL数据库配置中提供了正确的用户名和密码值。

注意:ATC将监听默认端口,8080而TSA将监听端口2222。如果不需要身份验证,请--no-really-i-dont-want-any-auth在删除基本身份验证选项后通过该选项。

Web服务器启动后,将显示以下输出。

{"timestamp":"1503657859.661247969","source":"tsa","message":"tsa.listening","log_level":1,"data":{}}
{"timestamp":"1503657859.666907549","source":"atc","message":"atc.listening","log_level":1,"data":{"debug":"127.0.0.1:8079","http":"0.0.0.0:8080"}}

现在停止服务器,因为还必须设置一些其他内容。

启动Concourse CI Worker。

sudo concourse worker \
  --work-dir /opt/concourse/worker \
  --tsa-host 127.0.0.1 \
  --tsa-public-key /opt/concourse/tsa_host_key.pub \
  --tsa-worker-private-key /opt/concourse/worker_key

上面的命令将假定TSA在本地主机上运行并且正在侦听默认端口2222

尽管可以使用上面的命令轻松启动Concourse Web和worker,但是建议使用Systemd来管理服务器。

配置环境和系统服务

使用Systemd服务管理应用程序可确保在出现故障和引导时自动启动应用程序。Concourse服务器不从任何配置文件中获取数据,但是可以从环境变量访问数据。无需设置全局环境变量,而是创建一个新文件来存储环境变量,然后使用Systemd服务将变量传递给Concourse CI。

为Concourse网站创建一个新的环境文件。

sudo nano /opt/concourse/web.env

填充文件。

CONCOURSE_SESSION_SIGNING_KEY=/opt/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/opt/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/opt/concourse/authorized_worker_keys

CONCOURSE_POSTGRES_USER=concourse
CONCOURSE_POSTGRES_PASSWORD=DBPassword
CONCOURSE_POSTGRES_DATABASE=concourse

CONCOURSE_BASIC_AUTH_USERNAME=admin
CONCOURSE_BASIC_AUTH_PASSWORD=StrongPass
CONCOURSE_EXTERNAL_URL=http://192.0.2.1:8080

BASIC_AUTH如果需要,请更改的用户名和密码。确保密钥文件的路径正确,并确保在PostgreSQL数据库配置中提供了正确的用户名和密码值。

同样,为工作程序创建环境文件。

sudo nano /opt/concourse/worker.env

填充文件。

CONCOURSE_WORK_DIR=/opt/concourse/worker
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/opt/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/opt/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1

由于环境文件包含用户名和密码,因此请更改其权限,以便其他用户无法访问它。

sudo chmod 600 /opt/concourse/*.env

现在为Concourse创建一个新用户以运行Web环境。这将确保Web服务器在隔离的环境中运行。

sudo adduser --system concourse

授予Concourse用户对Concourse CI文件目录的所有权。

sudo chown -R concourse:concourse /opt/concourse

为Concourse Web服务创建一个新的systemd服务文件。

sudo nano /etc/systemd/system/concourse-web.service

填充文件。

[Unit]
Description=Concourse CI web server
After=postgresql-9.6.service

[Service]
Type=simple
User=concourse
Group=concourse
Restart=on-failure
EnvironmentFile=/opt/concourse/web.env
ExecStart=/usr/bin/concourse web
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_web

[Install]
WantedBy=multi-user.target

保存并关闭文件。为Concourse Worker服务创建一个新的服务文件。

sudo nano /etc/systemd/system/concourse-worker.service

填充文件。

[Unit]
Description=Concourse CI worker process
After=concourse-web.service

[Service]
Type=simple
User=root
Group=root
Restart=on-failure
EnvironmentFile=/opt/concourse/worker.env
ExecStart=/usr/bin/concourse worker
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_worker

[Install]
WantedBy=multi-user.target

现在可以通过运行以下命令直接启动Web和辅助服务:

sudo systemctl start concourse-web concourse-worker

要使工作进程和Web进程能够在启动时自动启动,请运行:

sudo systemctl enable concourse-worker concourse-web

要检查服务状态,请运行:

sudo systemctl status concourse-worker concourse-web

如果服务未启动或处于FAILED状态,请从/tmp目录中删除缓存。

sudo rm -rf /tmp/*

重新启动服务。

sudo systemctl restart concourse-worker concourse-web

请注意,这次服务已正确启动。验证服务状态时的输出应为Simil。

[user@vultr ~]$ sudo systemctl status concourse-worker concourse-web
● concourse-worker.service - Concourse CI worker process
   Loaded: loaded (/etc/systemd/system/concourse-worker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
 Main PID: 3037 (concourse)
   CGroup: /system.slice/concourse-worker.service
           └─3037 /usr/bin/concourse worker

Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.934722900","source":"tsa","message":"t...""}}
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.941227913","source":"guardian","messag...0"}}
...

● concourse-web.service - Concourse CI web server
   Loaded: loaded (/etc/systemd/system/concourse-web.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
 Main PID: 3036 (concourse)
   CGroup: /system.slice/concourse-web.service
           └─3036 /usr/bin/concourse web

Aug 26 07:27:57 vultr.guest concourse_web[3036]: {"timestamp":"1503732477.925554752","source":"tsa","message":"tsa...ve"}}
Aug 26 07:28:02 vultr.guest concourse_web[3036]: {"timestamp":"1503732482.925430775","source":"tsa","message":"tsa...ve"}}
...
Hint: Some lines were ellipsized, use -l to show in full.

调整防火墙,以允许运行ATS的端口8080和运行TSA的端口2222。

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload

连接到服务器

服务器启动后,可以通过http://192.0.2.1:8080在任何浏览器中访问来访问Concourse CI的Web界面。使用环境文件中提供的用户名和密码登录。

要使用Fly连接到服务器,请运行:

fly -t my-ci login -c http://192.0.2.1:8080

上面的命令用于初始登录服务器。-t用于提供目标名称。替换my-ci为任何所需的目标名称。上面的命令将登录到默认团队main。它将要求环境文件中提供的用户名和密码。

输出将如下所示。

[user@vultr ~]$ fly -t my-ci login -c http://192.0.2.1:8080
logging in to team 'main'

username: admin
password:

target saved

目标登录将保存一天。在那之后,它将过期。

立即注销。

fly -t my-ci logout

fly可以用于登录网络外部的服务器,但前提是该服务器具有公共IP地址并且可以从网络外部访问。可以从下载站点或从服务器的Web UI下载Windows或MacOS二进制文件。

设置Nginx反向代理

通过Web UI发送到Concourse服务器的登录名和其他信息不安全。连接未加密。可以使用“让我们加密”免费SSL来设置Nginx反向代理。

安装Nginx Web服务器和Certbot,这是Let's Encrypt CA的客户端应用程序。

sudo yum -y install certbot-nginx nginx

启动并启用Nginx以在启动时自动启动:

sudo systemctl start nginx
sudo systemctl enable nginx

必须先通过防火墙启用端口80和443或标准HTTP和HTTPS服务,然后才能请求证书。Certbot将在颁发证书之前检查域授权。

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

端口8080不再需要通过防火墙,因为Concourse现在将在标准HTTPS端口上运行。删除防火墙条目以允许端口8080。

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

注意

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

生成SSL证书。

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

生成的证书很可能存储在/etc/letsencrypt/live/ci.example.com/目录中。SSL证书将存储为fullchain.pem,私钥将存储为privkey.pem

让我们加密证书在90天后过期,因此建议使用cronjobs设置证书的自动续订。Cron是一项系统服务,用于运行定期任务。

打开cron作业文件。

sudo crontab -e

在文件末尾添加以下行。

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

上述cron作业将在每个星期一的5:30 AM运行。如果证书到期,它将自动更新。

创建一个新的虚拟主机。

sudo nano /etc/nginx/conf.d/concourse-ssl.conf

填充文件。

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

    listen 443;
    server_name ci.example.com;

    ssl_certificate           /etc/letsencrypt/live/ci.example.com/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/ci.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/concourse.access.log;

    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_pass          http://localhost:8080;
      proxy_read_timeout  90;

      proxy_redirect      http://localhost:8080 https://ci.example.com;
    }
  }

注意:用ci.example.com实际的域替换。

编辑为Concourse Web创建的环境文件。

sudo nano /opt/concourse/web.env

更改的值,CONCOURSE_EXTERNAL_URL并在文件末尾添加两行。

CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080

保存文件并重新启动Concourse Web,Worker和Nginx Web服务器:

sudo systemctl restart concourse-worker concourse-web nginx

现在,通过SSL加密保护了往返浏览器的所有数据。



Leave a Comment

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

使用Nethogs监视网络带宽使用情况

使用Nethogs监视网络带宽使用情况

在本教程中,我们将介绍在CentOS 6x x64上安装和使用nethogs的过程。nethogs是一种网络监视工具,它允许Networ

如何在CentOS 7上安装BoltWire CMS

如何在CentOS 7上安装BoltWire CMS

使用其他系统?简介BoltWire是一个用PHP编写的免费,轻量级的内容管理系统。与大多数其他内容管理人员相比

在CentOS 6上设置SA-MP San Andreas多人服务器

在CentOS 6上设置SA-MP San Andreas多人服务器

欢迎来到另一个Vultr教程。在这里,您将学习如何安装和运行SAMP服务器。本指南是为CentOS 6编写的。先决条件

使用Etckeeper进行/ etc的版本控制

使用Etckeeper进行/ etc的版本控制

简介/ etc /目录在Linux系统运行中起着至关重要的作用。其原因是因为几乎每个系统配置

如何在CentOS 7上安装Microweber

如何在CentOS 7上安装Microweber

使用其他系统?Microweber是一个开放源代码的拖放式CMS和在线商店。Microweber源代码托管在GitHub上。本指南将向您展示

如何在CentOS 7上安装SonarQube

如何在CentOS 7上安装SonarQube

使用其他系统?SonarQube是用于质量系统开发的开源工具。它是用Java编写的,并且支持多个数据库。它提供

如何在CentOS 7上使用Mosh进行远程服务器管理

如何在CentOS 7上使用Mosh进行远程服务器管理

使用其他系统?Mosh是Mobile Shell的缩写,是一种新兴的远程终端应用程序,旨在提供更好的连接和使用

如何在CentOS 7上安装MoinMoin

如何在CentOS 7上安装MoinMoin

MoinMoin是一个使用Python编写的基于文件系统的开源Wiki引擎。如今,MoinMoin已广泛用于开源社区。许多供应商

在CentOS 7上安装H2O Web服务器

在CentOS 7上安装H2O Web服务器

H2O是新一代HTTP服务器,它对所有当前使用的Web服务器都具有出色的,功能齐全的HTTP / 2实现。使用H2O作为您的Web服务器

如何在Debian,CentOS和FreeBSD上使用Sudo

如何在Debian,CentOS和FreeBSD上使用Sudo

在Linux和Unix系统管理员中,使用sudo用户访问服务器并在root级执行命令是一种非常普遍的做法。使用泡沫

如何在Ubuntu 16.10上安装Countly Analytics

如何在Ubuntu 16.10上安装Countly Analytics

使用其他系统?Countly是一个开源Web /移动分析和营销平台。它具有许多用于从Web收集数据的功能

如何在CentOS 7上安装MODX CMS和Nginx

如何在CentOS 7上安装MODX CMS和Nginx

MODX是一个用PHP编写的免费开放源内容管理系统。它使用MySQL或MariaDB来存储其数据库。MODX专为满足以下条件的企业而设计:

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

使用其他系统?Lychee 3.1相册是一种简单,灵活,免费和开源的照片管理工具,可在VPS服务器上运行。安装

如何在CentOS 7上安装ERPNext开源ERP

如何在CentOS 7上安装ERPNext开源ERP

使用其他系统?ERP或企业资源计划是用于管理核心业务流程的企业应用程序套件。ERPNext是免费的

如何在CentOS 7 LAMP VPS上安装Paste 2.1

如何在CentOS 7 LAMP VPS上安装Paste 2.1

使用其他系统?Paste 2.1是一个简单,灵活,免费和开源的pastebin应用程序,用于存储代码,文本等。最初是

如何在CentOS 7上安装Seafile Server

如何在CentOS 7上安装Seafile Server

使用其他系统?Seafile(社区版本)是一个免费和开源的文件同步和共享解决方案,类似于ownCloud。机智

如何在CentOS 7上安装Kolab组件

如何在CentOS 7上安装Kolab组件

使用其他系统?Kolab Groupware是一个免费的基于Web的开源组件软件。它的功能包括电子邮件通信,事件

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息