Como instalar e configurar o Concourse CI no Ubuntu 16.04

Introdução

A Integração Contínua é uma prática de desenvolvimento de software DevOps que permite que os desenvolvedores mesclem frequentemente o código modificado no repositório compartilhado várias vezes ao dia. Após cada mesclagem, compilações e testes automáticos 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 a entrega contínua do software. Mudar de um lado para o outro 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 com o usuário da web que exibe as informações de construção interativamente.

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

Pré-requisitos

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

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

Atualize seu sistema base usando o guia Como atualizar o Ubuntu 16.04 . Depois que seu sistema for atualizado, continue com a instalação do PostgreSQL.

Instale e configure o banco de dados PostgreSQL

O PostgreSQL é um sistema de banco de dados relacional de objetos. Concourse armazena seus dados de pipeline em um banco de dados PostgreSQL. Adicione o repositório 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 ative-o automaticamente no momento da inicialização.

sudo systemctl start postgresql
sudo systemctl enable postgresql

Mude a senha do usuário padrão do PostgreSQL.

sudo passwd postgres

Faça o login como usuário do PostgreSQL:

sudo su - postgres

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

createuser concourse

Nota : O usuário padrão do PostgreSQL pode ser usado para autenticação do banco de dados, mas é recomendável 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 do banco de dados do Concourse recém-criado.

ALTER USER concourse WITH ENCRYPTED password 'DBPassword';

Importante : Substitua DBPassword por uma senha forte. Anote a senha, conforme exigida posteriormente no tutorial.

Crie um novo banco de dados para o Concourse.

CREATE DATABASE concourse OWNER concourse;

Saia do psql shell.

\q

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

exit

Baixe e instale o CI do Concourse

Baixe a versão mais recente do executável Concourse e armazene-a /usr/bin para que possa ser executada diretamente. A versão mais recente dos binários Concourse e Fly pode ser encontrada na página de download do 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-a /usr/bin.

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

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

Atribua permissão de execução aos binários concourse e baixados fly.

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

Verifique se Concourse e 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 o concurso funcionar, pelo menos três pares de chaves devem ser gerados. Para criptografar os dados da sessão, gere a session_signing_key. Essa chave também será usada pela TSA para assinar os pedidos feitos ao ATC. Para proteger o servidor TSA SSH, gere a tsa_host_key. Por fim, gere um worker_key para cada trabalhador.

Crie um novo diretório para armazenar as chaves e a configuração relacionadas ao IC 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 trabalhadores, copiando seu conteúdo para o authorized_worker_keys arquivo.

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

Concourse inicial

O Concourse fornece dois componentes separados que precisam ser iniciados: a web e o trabalhador. 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 a senha, basic-auth se desejar. Verifique se o caminho para os arquivos de chave está correto e se o valor correto para nome de usuário e senha na configuração do banco de dados PostgreSQL é 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 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

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

Embora a web e o trabalhador 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 caso de falhas e no momento da inicialização. O servidor Concourse não aceita 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 globais, crie um novo arquivo para armazenar as variáveis ​​de ambiente e depois passe as variáveis ​​para o Concourse CI usando o serviço Systemd.

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

sudo nano /opt/concourse/web.env

Preencher 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 a senha, BASIC_AUTH se desejar. Verifique se o caminho para os arquivos de chave está correto e se o valor correto para nome de usuário e senha na configuração do banco de dados PostgreSQL é fornecido.

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

sudo nano /opt/concourse/worker.env

Preencher 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 de ambiente contêm nomes de usuário e senhas, altere suas permissões para que não possam ser acessados ​​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 sendo executado em um ambiente isolado.

sudo useradd concourse

Conceda ao usuário do concurso a propriedade do diretório do arquivo de IC do concurso.

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

Preencher 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 do Concourse.

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

Preencher 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 trabalhador agora pode ser iniciado diretamente.

sudo systemctl start concourse-web concourse-worker

Para permitir que o processo de trabalho e da Web seja iniciado 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 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.

[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.

Conectando ao servidor

Depois que o servidor é iniciado, a interface da web do Concourse CI pode ser acessada acessando http://192.0.2.1:8080 qualquer navegador. Efetue login usando o nome de usuário e a 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 logon inicial no servidor. -t é usado para fornecer um nome de destino. substitua my-ci por qualquer nome de destino desejado. O comando acima fará login na equipe padrão main. Ele solicitará o nome de usuário e a senha fornecidos no arquivo de ambiente.

A saída será semelhante à seguinte.

[user@vultr ~]$ 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 expirará.

Para sair imediatamente.

fly -t my-ci logout

O Fly pode ser usado para efetuar login no servidor fora da rede, mas apenas se o servidor tiver um endereço IP público e puder ser acessado 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 o Proxy Reverso do Nginx

Logins e outras informações enviadas pela interface do usuário da web ao servidor Concourse não são protegidos. A conexão não está criptografada. Um proxy reverso Nginx pode ser configurado com um SSL grátis Let's Encrypt.

Instale o Nginx.

sudo apt -y install nginx

Inicie o Nginx e permita que ele inicie automaticamente no momento da inicialização.

sudo systemctl start nginx
sudo systemctl enable nginx

Adicione o repositório Certbot.

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

Instale o Certbot, que é o aplicativo cliente do Let's Encrypt CA.

sudo apt -y install certbot

Nota : Para obter certificados da Let's Encrypt CA, o domínio para o qual os certificados devem ser gerados deve estar apontado para o servidor. Caso contrário, faça as alterações necessárias nos registros DNS do domínio e aguarde a propagação do DNS 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, portanto, é recomendável que a renovação automática seja feita usando cronjobs. Cron é um serviço do sistema usado para executar tarefas periódicas.

Abra o arquivo de tarefa cron.

sudo crontab -e

Adicione a seguinte linha no final do arquivo.

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

O trabalho cron acima será executado todos os dias às 05:30. Se o certificado estiver vencido, ele será renovado automaticamente.

Crie um novo host virtual.

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

Preencher 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 de ambiente criado para o concurso da Web.

sudo nano /opt/concourse/web.env

Altere o valor de CONCOURSE_EXTERNAL_URL e também 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 estão protegidos com criptografias SSL.



Leave a Comment

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.