Como instalar e configurar o CI do Concourse no Ubuntu 16.04

Você está aqui:
Tempo estimado de leitura: 7 min

Introdução

A Integração Contínua é uma prática de desenvolvimento de software DevOps que permite aos desenvolvedores mesclar frequentemente o código modificado no repositório compartilhado várias vezes ao dia. Após cada mesclagem, compilações automáticas e testes são executados para detectar problemas no código. Ele permite que os desenvolvedores encontrem e resolvam os erros rapidamente para melhorar a qualidade do software e fornecer entrega contínua do software. Mudar para lá e para cá a partir do Concourse é muito fácil, pois mantém toda a sua configuração em arquivos declarativos que podem ser verificados no controle de versão. Ele também fornece uma interface de usuário da web que exibe as informações de compilação de forma interativa.

Componentes Concourse.
  • ATC é o principal componente do Concourse. É responsável por executar a interface do usuário da Web e a API. Ele também cuida de todo o agendamento de pipeline.
  • O TSA é um servidor SSH personalizado. É responsável por registrar com segurança um funcionário com o ATC.
  • Os funcionários também executam dois serviços diferentes:
    1. O Garden é um tempo de execução de contêiner e uma interface para orquestrar contêineres remotamente em um trabalhador.
    2. O Baggageclaim é um servidor de gerenciamento de cache e artefato.
  • Fly é uma interface de linha de comando usada para interagir com o ATC para configurar os pipelines do Concourse.

Pré-requisitos

  • Uma instância do servidor Site & Site Ubuntu 16.04.
  • Um usuário sudo .

Certifique-se de substituir todas as ocorrências de 192.0.2.1 e ci.example.com com o seu endereço IP público real da Vultr e o nome real do domínio.

Atualize seu sistema básico usando o guia Como atualizar o Ubuntu 16.04 . Uma vez que seu sistema tenha sido atualizado, prossiga com a instalação do PostgreSQL.

Instalar e configurar o banco de dados PostgreSQL

O PostgreSQL é um sistema de banco de dados relacional de objetos. O Concourse armazena seus dados de pipeline em um banco de dados PostgreSQL. Adicione o repositório do PostgreSQL.

echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update

Instale o servidor de banco de dados PostgreSQL.

sudo apt -y install postgresql

Inicie o servidor PostgreSQL e habilite-o para iniciar automaticamente no momento da inicialização.

sudo systemctl start postgresql
sudo systemctl enable postgresql

Altere a senha para o usuário padrão do PostgreSQL.

sudo passwd postgres

Entre como usuário do PostgreSQL:

sudo su - postgres

Crie um novo usuário do PostgreSQL para o CI do Concourse.

createuser concourse

Nota : O usuário padrão do PostgreSQL pode ser usado para autenticação do banco de dados, mas é recomendado usar um usuário dedicado para autenticação do banco de dados Concourse em uma configuração de produção.

O PostgreSQL fornece um shell para executar consultas no banco de dados. Mude para o shell do PostgreSQL.

psql

Defina uma senha para o usuário recém criado do banco de dados do Concourse.

ALTER USER concourse WITH ENCRYPTED password 'DBPassword';

Importante : Substitua DBPassword por uma senha forte. Anote a senha, pois ela será necessária posteriormente no tutorial.

Crie um novo banco de dados para o Concourse.

CREATE DATABASE concourse OWNER concourse;

Saia da psql concha.

\q

Mude para o usuário sudo do usuário atual postgres.

exit

Faça o download e instale o CI do Concourse

Faça o download da versão mais recente do executável do Concourse e armazene-a /usr/bin para que ela possa ser executada diretamente. A versão mais recente dos binários Concourse and Fly pode ser encontrada na página de downloaddo Concourse . Novos lançamentos são muito frequentes. Substitua o link abaixo pelo novo link da versão mais recente.

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

Da mesma forma, baixe a versão mais recente do executável fly e armazene-o nele /usr/bin.

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

Fly é a interface de linha de comando usada para conectar-se à API do ATC do Concourse CI. O Fly está disponível para várias plataformas, como Linux, Windows e MacOS.

Atribuir permissão de execução para o baixado concourse e fly binários.

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

Verifique se o Concourse e o Fly estão funcionando corretamente, verificando sua versão.

concourse -version
fly -version

Gerar e configurar chaves RSA

Os pares de chaves RSA fornecem uma maneira de criptografar a comunicação entre os componentes do Concourse.

Para que o Concourse funcione, pelo menos três pares de chaves devem ser gerados. Para criptografar os dados da sessão, gere um arquivo session_signing_key. Esta chave também será usada pela TSA para assinar os pedidos que fizer ao ATC. Para proteger o servidor TSA SSH, gere um tsa_host_key. Finalmente, gere um worker_key para cada trabalhador.

Crie um novo diretório para armazenar as chaves e configurações relacionadas ao CI do Concourse.

sudo mkdir /opt/concourse

Gere as chaves necessárias.

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

Autorize a chave pública dos funcionários copiando seu conteúdo para o authorized_worker_keys arquivo.

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

Concurso inicial

O Concourse fornece dois componentes separados que precisam ser iniciados: a web e o worker. Inicie a web do 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

Altere o nome de usuário e senha do basic-auth se desejado. Certifique-se de que o caminho para os arquivos-chave esteja correto e certifique-se de que o valor correto para nome de usuário e senha na configuração do banco de dados PostgreSQL seja fornecido.

Nota : O ATC escutará a porta padrão 8080 e o TSA escutará a porta 2222. Se a autenticação não for desejada, passe a --no-really-i-dont-want-any-authopção após remover as opções básicas de autenticação.

Depois que o servidor da Web for iniciado, a seguinte saída será exibida.

{"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"}}

Pare o servidor por enquanto, pois mais algumas coisas ainda precisam ser configuradas.

Inicie o trabalhador de CI do Concourse.

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

O comando acima assumirá que o TSA está sendo executado no host local e ouvindo a porta padrão 2222.

Embora a web e o funcionário do Concourse possam ser iniciados facilmente usando os comandos acima, é recomendável usar o Systemd para gerenciar o servidor.

Configurar ambiente e serviço Systemd

O uso do serviço Systemd para gerenciar o aplicativo garante que o aplicativo seja iniciado automaticamente em falhas e no momento da inicialização. O servidor Concourse não coleta dados de nenhum arquivo de configuração, mas pode acessar os dados de variáveis ​​de ambiente. Em vez de definir variáveis ​​de ambiente global, crie um novo arquivo para armazenar as variáveis ​​de ambiente e, em seguida, passe as variáveis ​​para o CI do Concourse usando o serviço Systemd.

Crie um novo arquivo de ambiente para a web do Concourse.

sudo nano /opt/concourse/web.env

Preencha o arquivo.

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

Altere o nome de usuário e senha do BASIC_AUTH se desejado. Certifique-se de que o caminho para os arquivos-chave esteja correto e certifique-se de que o valor correto para nome de usuário e senha na configuração do banco de dados PostgreSQL seja fornecido.

Da mesma forma, crie um arquivo de ambiente para o trabalhador.

sudo nano /opt/concourse/worker.env

Preencha o arquivo.

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

Como os arquivos do ambiente contêm nomes de usuário e senhas, altere suas permissões para que não possam ser acessadas por outros usuários.

sudo chmod 600 /opt/concourse/*.env

Agora crie um novo usuário para o Concourse para executar o ambiente da web. Isso garantirá que o servidor da Web esteja em execução em um ambiente isolado.

sudo useradd concourse

Conceda ao proprietário do concourse propriedade sobre o diretório do arquivo Concourse CI.

sudo chown -R concourse:concourse /opt/concourse

Crie um novo arquivo de serviço systemd para o serviço da web Concourse.

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

Preencha o arquivo.

[Unit]
Description=Concourse CI web server

[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

Salve e feche o arquivo. Crie um novo arquivo de serviço para o serviço do trabalhador Concourse.

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

Preencha o arquivo.

[Unit]
Description=Concourse CI worker process

[Service]
Type=simple
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

O serviço da Web e do funcionário agora pode ser iniciado diretamente.

sudo systemctl start concourse-web concourse-worker

Para permitir que o trabalhador e o processo da Web iniciem automaticamente no momento da inicialização, execute o seguinte.

sudo systemctl enable concourse-worker concourse-web

Para verificar o status dos serviços, execute o seguinte.

sudo systemctl status concourse-worker concourse-web

Se o serviço não for iniciado ou estiver no FAILED estado, remova o cache do /tmp diretório.

sudo rm -rf /tmp/*

Reinicie os serviços.

sudo systemctl restart concourse-worker concourse-web

Observe que desta vez os serviços foram iniciados corretamente. A saída ao verificar o status dos serviços será semelhante à seguinte.

[[email protected] ~]$ 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.

Conectando-se ao servidor

Uma vez que o servidor é iniciado, a interface web do CI do Concourse pode ser acessada http://192.0.2.1:8080 em qualquer navegador. Faça o login usando o nome de usuário e senha fornecidos no arquivo de ambiente.

Para se conectar ao servidor usando o Fly, execute o seguinte.

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

O comando acima é usado para o login inicial no servidor. -t é usado para fornecer um nome de destino. substitua my-cipor qualquer nome de destino desejado. O comando acima fará o login na equipe padrão main. Ele pedirá o nome de usuário e senha fornecidos no arquivo de ambiente.

A saída será semelhante à seguinte.

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

username: admin
password:

target saved

O login de destino será salvo por um dia. Depois disso, ele irá expirar.

Para sair imediatamente.

fly -t my-ci logout

O Fly pode ser usado para fazer o login no servidor fora da rede, mas somente se o servidor tiver um endereço IP público e for acessível de fora da rede. O binário do Windows ou MacOS pode ser baixado do site de download ou da interface do usuário da web do servidor.

Configurando Proxy Reverso Nginx

Logins e outras informações enviadas através da interface do usuário da web para o servidor Concourse não são protegidas. A conexão não é criptografada. Um proxy reverso Nginx pode ser configurado com um SSL gratuito.

Instale o Nginx.

sudo apt -y install nginx

Inicie o Nginx e ative-o para iniciar automaticamente no momento da inicialização.

sudo systemctl start nginx
sudo systemctl enable nginx

Adicione o repositório do Certbot.

sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update

Instale o Certbot, que é o aplicativo cliente para o Let’s Encrypt CA.

sudo apt -y install certbot

Nota : Para obter certificados de Let’s Encrypt CA, o domínio para o qual os certificados serão gerados deve estar voltado para o servidor. Caso contrário, faça as alterações necessárias nos registros DNS do domínio e aguarde o DNS se propagar antes de fazer a solicitação de certificado novamente. O Certbot verifica a autoridade do domínio antes de fornecer os certificados.

Gere os certificados SSL.

sudo certbot certonly --webroot -w /var/www/html -d ci.example.com

Os certificados gerados provavelmente serão armazenados no /etc/letsencrypt/live/ci.example.com/ diretório. O certificado SSL será armazenado como fullchain.pem e a chave privada será armazenada como privkey.pem.

Vamos Criptografar certificados expiram em 90 dias, por isso é recomendado renovação automática para os certificados é configurado usando cronjobs. Cron é um serviço do sistema que é usado para executar tarefas periódicas.

Abra o arquivo de trabalho cron.

sudo crontab -e

Adicione a seguinte linha no final do arquivo.

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

O cron job acima será executado todos os dias às 5:30 da manhã. Se o certificado estiver vencido, ele será automaticamente renovado.

Crie um novo host virtual.

sudo nano /etc/nginx/sites-available/concourse

Preencha o arquivo.

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;
    }
  }

Nota : Substitua ci.example.com pelo domínio real.

Ative o arquivo de configuração.

sudo ln -s /etc/nginx/sites-available/concourse /etc/nginx/sites-enabled/concourse

Edite o arquivo Environment criado para o Concourse Web.

sudo nano /opt/concourse/web.env

Altere o valor de CONCOURSE_EXTERNAL_URL e adicione mais duas linhas no final do arquivo.

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

Salve o arquivo e reinicie o Concourse Web, Worker e Nginx.

sudo systemctl restart concourse-worker concourse-web nginx

Todos os dados enviados para e do navegador agora são protegidos por criptografias SSL.

Esse artigo foi útil?
Não Gostei 0
Visualizações: 118

Ainda não Têm uma Conta?

Então Cadastre-se

Nome de Usuário*
E-mail*
Senha*
Confirmar Senha*

Já têm Uma Conta? Click Aqui.

Já tem uma Conta?

Ainda não tem Conta?