Os quadros de status são para 'gerentes de projeto'! Retaliar uma construção quebrada com uma saraivada de mísseis de espuma.
Retaliação é um monitor de construção Jenkins CI que coordena automaticamente um contra-ataque de míssil de espuma contra o desenvolvedor que "quebra a construção". Ele faz isso reproduzindo uma sequência de controle pré-programada para um lançador de mísseis de espuma USB para atingir o macaco de código agressor.
Em um nível mais profundo, a retaliação é mais do que apenas um "simples script python". É uma repensação radical sobre como gerenciar equipes de desenvolvimento de software e o ciclo de vida de desenvolvimento de software. Funciona em um nível psicológico profundo para oferecer melhorias de produtividade invisíveis em todas as outras coisas de “programação extrema” sobre as quais os consultores externos falam. A ameaça primordial de destruição mutuamente assegurada que se esconde na psique de cada programador garante que mesmo os desenvolvedores mais desleixados nunca se esquecerão de "verificar o arquivo perdido" novamente!
A retaliação nos trouxe a programação em pares de melhoria de produtividade prometida, mas que nunca conseguiu cumprir! Vimos uma redução de 13,37% nas quebras de build desde sua implementação.
Will, Hacker Chefe de Código
Honestamente, você trabalharia em uma equipe de desenvolvimento com um notificador de compilação Lava Lamp? O que vem a seguir? Gato de Nyan tapetes para rato? Os verdadeiros programadores trabalham sob a ameaça de retaliação!
Matt, máquina de codificação
Faz o que diz na caixa. Vi melhorias na minha equipe e ainda nem instalamos! Apenas a simples ameaça colocou a codificação da minha equipe na linha.
Tom, capitão do código principal
Você pode ver a retaliação em ação neste vídeo.
Monte seu lançador de mísseis USB Dream Cheeky Thunder em um local central e fixo.
Baixe o script retaliation.py no sistema conectado ao seu lançador de mísseis.
Modifique seu COMMAND_SETS
no script retaliation.py
para definir seus comandos de direcionamento para cada um de seus codificadores de freio de construção (seu ID de usuário conforme listado em Jenkins). Um conjunto de comandos é uma série de comandos de movimento e disparo. Recomenda-se iniciar cada conjunto de comandos com um comando “zero”. Isso estaciona o lançador em uma posição conhecida (canto inferior esquerdo). Você pode então usar “up” e “right” seguidos de um tempo (em milissegundos) para posicionar seu fogo.
Você pode testar um conjunto chamando retaliation.py com o nome do alvo. por exemplo:
python retaliation.py "[developer's user name]"
Tentativa e erro é a melhor abordagem. Considere fazer isso secretamente depois do expediente para obter melhores resultados!
Configure o plugin de notificação Jenkins. Defina um endpoint UDP
na porta 22222
apontando para o sistema que hospeda retaliation.py
. Dica: Certifique-se de que seu firewall não esteja bloqueando o UDP nesta porta.
Comece a escutar eventos de compilação com falha executando o comando:
python retaliation.py stalk
(Considere configurar isso como um script de inicialização. No Windows, comece com pythonw.exe
para mantê-lo em execução oculto em segundo plano.)
Aguarde DEFCON 1 - Que comecem os jogos de guerra!
Obrigado à equipe de desenvolvimento do PaperCut (trabalhando no software de gerenciamento de impressão) por "enfrentar alguns problemas" durante os testes!
Selecione cuidadosamente o local de montagem. Escolha um local central em seu escritório. Esforce-se para maximizar a separação angular entre os alvos. Isso reduzirá a probabilidade de incidentes de fogo amigo... mas, novamente, isso faz parte do território e faz parte da diversão!
Considere colar o lançador usando fita dupla-face para travar sua posição. Isso reduz a chance de alguém usar um “hack físico” para interromper o sistema de mira por coordenadas.
Se o autor da quebra de construção estiver à queima-roupa, por razões de saúde e segurança, sugerimos mirar no teclado ou monitor em vez da cabeça.
Se você tiver uma área ampla para cobrir, considere o lançamento de múltiplos mísseis (por exemplo, suporte de cluster!). Configure o script em várias máquinas e configure várias notificações de endpoint no Jenkins.
Para que isso funcione no Windows, você precisará instalar o PyUSB e o libusb-win32. Isso pode ser um pouco complicado, mas se você domina os scripts de construção de CI, então deve ser fácil!
Se sua equipe de desenvolvimento estiver lá em baixo e você perceber que a Retaliação está perdendo o efeito, tente mergulhar cada míssil em um pouco de Vegemite para dar um soco adicional :-)
retaliation.py
também funciona como uma API de script de linha de comando para o Dream Cheeky USB Missile Launcher . Você pode invocá-lo para controlar o dispositivo a partir de um script ou linha de comando da seguinte maneira:
retaliation.py reset
retaliation.py right 3000
retaliation.py up 700
retaliation.py fire 1
Se você tiver outros usos ou ideias interessantes para retaliação, compartilhe sua história!