Se você desenvolve software para Linux, deveria conhecer o Open Build Service (OBS). O que o torna uma ferramenta tão interessante? Extraído do seu site (tradução livre minha):
O Open Build Service (OBS) é um sistema para compilar e distribuir pacotes binários a partir de códigos-fonte de forma automática, consistente e reprodutível. Você pode distribuir pacotes, assim como atualizações, add-ons, appliances e distribuições Linux inteiras para uma vasta gama de sistemas operacionais e arquiteturas de hardware.
Na prática, você desenvolvedor pode enviar o código-fonte do seu software para o OBS e obter pacotes prontos para instalar no openSUSE, Fedora, Debian, Ubuntu e outras distribuições, assim como pacotes para i586, x86_64, ARM e outras arquiteturas. Os usuários do software podem baixar esses pacotes diretamente do OBS. Ele também é capaz de fazer sistemas Live: você pode oferecer aos seus usuários a possibilidade de testar seu software em um sistema limpo e controlado sem necessidade de instalação.
O OBS é um software livre, de modo que você pode baixá-lo, instalá-lo em um servidor próprio e usá-lo localmente. Ou (mais facil) você pode usar o servidor de referência, disponível pública e gratuitamente em build.opensuse.org. Esse servidor é usado principalmente para o desenvolvimento da distribuição openSUSE, mas também hospeda vários projetos comunitários.
Além disso, se você é um desenvolvedor, provavelmente conhece o Git e o GitHub — dispensam apresentações. E se eu te disser que você pode integrar o OBS com o GitHub de modo que seu software seja sempre compilado, empacotado e disponibilizado para download logo após um git push
? Ficou interessado?
Como configurar essa integração é o que você verá neste post!
Começando a usar o OBS
Não vou falar sobre os conceitos básicos do OBS aqui, seria assunto para um post inteiro. Para aprender o básico do OBS, consulte as páginas a seguir (em inglês):
Vou assumir que você já consegue entrar (“fazer login”) com sua conta do openSUSE em build.opensuse.org. Se você ainda não tem uma conta, crie uma clicando no link Sign Up (inscrever-se) no topo da página.
Crie um pacote vazio para o seu software no OBS. Aqui vou usar como exemplo o repositório patterns do Linux Kamarada no GitHub, que no momento possui apenas um arquivo spec.
Se você não sabe o que é um arquivo spec e/ou é novo no empacotamento RPM, leia (em inglês):
Também vou assumir que você instalou o osc (o cliente de linha de comando do OBS) no seu computador. Se você usa openSUSE, pode instalar o osc executando:
1
# zypper install osc
Crie uma cópia local (“faça checkout”) do seu projeto pessoal (home project) do OBS:
1
$ osc checkout home:seu_nome_de_usuario
Entre na pasta do pacote:
1
$ cd home:seu_nome_de_usuario/nome_do_pacote
Agora vamos integrar o OBS com o GitHub.
OBS: obtendo o código-fonte do GitHub
Usando o osc, configure o serviço de código-fonte (source service) do OBS para obter o código-fonte do GitHub:
1
$ osc add git://github.com/kamarada/patterns.git
É criado na pasta um arquivo _service
. Abra-o e substitua seu conteúdo pelo seguinte:
1
2
3
4
5
6
7
8
<services>
<service name="obs_scm">
<param name="scm">git</param>
<param name="url">git://github.com/kamarada/patterns.git</param>
<param name="revision">15.1-dev</param>
<param name="extract">patterns-kamarada-gnome.spec</param>
</service>
</services>
Note que estou usando o ramo (branch) 15.1-dev
. Se você pretende usar o ramo master
para o seu pacote, pode simplesmente omitir o parâmetro revision
(revisão).
Comite as alterações (“faça o commit” das alterações):
1
$ osc commit
Comitar para o OBS automaticamente dispara o serviço de código-fonte e o processo de compilação e empacotamento. Se você acessar build.opensuse.org, verá que seu projeto está compilando (building):
Para que o GitHub possa disparar essas mesmas ações, você precisa gerar um token de autorização (authorization token) usando o osc:
1
$ osc token --create --operation runservice home:seu_nome_de_usuario nome_do_pacote
O comando retornará o token e sua identificação (id):
1
2
3
4
5
<status code="ok">
<summary>Ok</summary>
<data name="token">UmAsTrInGeNoRmEcOmSeUtOkEn</data>
<data name="id">4321</data>
</status>
Como teste, você pode disparar manualmente a criação do seu pacote usando esse token:
1
$ osc token --trigger UmAsTrInGeNoRmEcOmSeUtOkEn
Se você acessar build.opensuse.org, verá que seu projeto está compilando.
GitHub: avisando novos commits ao OBS
Queremos atualizar o código-fonte do nosso pacote no OBS toda vez que ele mudar no GitHub. Podemos fazer com que o GitHub dispare automaticamente essa atualização configurando um webhook do GitHub.
Para fazer isso, execute os seguintes passos:
- Entre (sign in) no GitHub e vá até seu repositório (no meu caso, https://github.com/kamarada/patterns)
- Clique em Settings (configurações)
- Clique em Webhooks
- Clique no botão Add webhook (adicionar webhook):
Forneça os seguintes parâmetros:
- Payload URL:
https://build.opensuse.org/trigger/webhook?id=4321
(endereço de carregamento, substitua4321
pela id do seu token) - Content type (tipo do conteúdo):
application/x-www-form-urlencoded
(padrão) - Secret (segredo, senha):
AcRaZyStRiNgWhIcHiSyOuRtOkeN
Deixe os outros parâmetros como estão, com seus valores padrão:
- SSL verification: Enable SSL verification (verificação SSL: habilitar)
- Which events would you like to trigger this webhook? Just the push event (que eventos você gostaria que disparassem este webhook? Apenas o evento push)
- Active (ativo)
Finalmente, clique no botão verde Add webhook (adicionar webhook):
De volta à página anterior, você pode ver o webhook adicionado:
A partir de agora, cada git push
para o GitHub irá disparar automaticamente uma reconstrução do pacote no OBS. Seu nome de usuário aparecerá no histórico do código-fonte do OBS, que pode ser verificado com o comando osc log
.
Divirta-se muito! (Have a lot of fun!)
Referências
- openSUSE:Build Service Tutorial - openSUSE Wiki
- Let github.com trigger your source update - OBS blog
- OBS + GitHub - deprecation of GitHub Services - opensuse-buildservice Mailing List Archive (e a sequência alguns meses depois)
- Integrating External Source Repositories - OBS Reference Guide
- Using Source Services - OBS User Guide
- OBS Token Authorization - OBS Reference Guide
- GitHub - seccubus/obs_autobuild_test: Test to see how you make OpenSUSE build services build automagically