Como agendar trabalhos em Jenkins?

284

Adicionei um novo emprego na Jenkins, que quero agendar periodicamente.

No trabalho de configuração , estou marcando a caixa de seleção "Compilar periodicamente" e no campo de texto Agendar adicionamos a expressão:

15 13 * * *

Mas não é executado no horário agendado.

É o procedimento correto para agendar um trabalho?

Digite a descrição da imagem aqui

O trabalho deve ser executado às 04h20, mas não está sendo executado.

Sangram Anand
fonte
Ele roda ou NÃO roda? Seu cron diz "Todos os dias às 13:15", se bem me lembro. E sim: considero a maneira correta de agendar compilações periódicas.
Fildor 18/09/12
1
Talvez isso ajude você: en.wikipedia.org/wiki/Cron#CRON_expression - vejo Cedric já o vinculando ... Talvez você deva nos dizer qual é o período pretendido.
Fildor 18/09/12
1
Para referência, o ponto de interrogação azul no RHS revela uma boa explicação dos valores possíveis
devstopfix
Aqui está uma boa página para gerar automaticamente -> crontab-generator.org
Fabián Carrasco

Respostas:

506

Ao definir o período de agendamento, 15 13 * * *você deve informar ao Jenkins para agendar a construção todos os dias de todos os meses de cada ano, no 15º minuto da 13ª hora do dia.

Jenkins usou uma expressão cron e os diferentes campos são:

  1. MINUTES Minutos em uma hora (0-59)
  2. HORAS Horas em um dia (0-23)
  3. DIA DIA em um mês (1-31)
  4. MÊS Mês em um ano (1-12)
  5. DIA DA SEMANA Dia da semana (0 a 7), onde 0 e 7 são domingo

Se você deseja agendar sua construção a cada 5 minutos, isso fará o trabalho: */5 * * * *

Se você deseja agendar sua construção todos os dias às 8h00, isso fará o trabalho: 0 8 * * *

Nas últimas versões (2014), o Jenkins possui um novo parâmetro H(extraído da documentação do código do Jenkins ):

Para permitir que tarefas agendadas periodicamente produzam carga uniforme no sistema, o símbolo H(para "hash") deve ser usado sempre que possível.

Por exemplo, o uso 0 0 * * *para uma dúzia de trabalhos diários causará um grande aumento à meia-noite. Por outro lado, o uso H H * * *ainda executaria cada trabalho uma vez por dia, mas não todos ao mesmo tempo, melhor usando recursos limitados.

Observe também que:

O Hsímbolo pode ser considerado como um valor aleatório em um intervalo, mas na verdade é um hash do nome do trabalho, não uma função aleatória, para que o valor permaneça estável para qualquer projeto.

Mais exemplo de uso de 'H'

Cédric Julien
fonte
5
Então, como construir periodicamente após cada 6 horas. Será que * */6 * * *vai funcionar?
ѕтƒ
1
@ ѕтƒ: sim, ele vai lançar a compilação a cada 6 horas
Cédric Julien
31
Carga distribuídos uniformemente pelo uso de 'H / 5 * * * *' em vez de '* / 5 * * * *'
friederbluemle
1
Se você deseja limitar o intervalo do H, pode usar H (1-3), por exemplo, para escolher um número entre 1 e 3. O exemplo seria HH (1-3) * * * para executar uma vez entre 1h e 3h
AndyClaw
16
Frustrantemente, parece haver algo no meu cérebro que simplesmente não consegue entender essas expressões sem ter que me referir constantemente aos documentos.
Habilidade M2 ​​#
34

Jenkins permite configurar várias vezes, separadas por quebras de linha.

Se você precisar construir diariamente às 7h, juntamente com todos os domingos às 16h, o abaixo funciona bem.

H 7 * * *

H 16 * * 0
Pawan Gaitonde
fonte
1
H (0-0) 6 * * 1 (para as 6:00 ET na segunda-feira), H (0-0) 16 * * 0 (às 16:00 ET no domingo). Executando o H 16 simples (não será executado às 16:00 / 16:00), você precisará usar o H (0-0) 16 ....
AKS
2
@ArunSangal vez de H(0-0)você pode simplesmente usar 0a vantagem de usar Hé que nem todos os empregos tentará executar, ao mesmo tempo exatamente, mas sim tentar obter "a próxima disponível time-slot"
derHugo
28

*/5 * * * * significa a cada 5 minutos

5 * * * * significa o quinto minuto de cada hora

Nikul Padhya
fonte
26

O formato é o seguinte:

MINUTO (0-59), HORA (0-23), DIA (1-31), MÊS (1-12), DIA DA SEMANA (0-6)

A letra H, representando a palavra Hash, pode ser inserida em vez de qualquer um dos valores. Ele calculará o parâmetro com base no código de hash do nome do seu projeto.

Isso é feito para que, se você estiver criando vários projetos em sua máquina de construção ao mesmo tempo, digamos meia-noite todos os dias, nem todos eles iniciam sua execução de construção ao mesmo tempo. Cada projeto inicia sua execução em um minuto diferente, dependendo do seu código de hash.

Você também pode especificar o valor entre os números, ou seja, H (0,30) retornará o código de hash do projeto onde os possíveis hashes são de 0 a 30.

Exemplos:

  1. Comece a construir diariamente às 08:30 da manhã, de segunda a sexta-feira: 30 08 * * 1-5

  2. Construção diária durante a semana, duas vezes ao dia, às 12:00 e meia-noite, 00:00, domingo a quinta-feira: 00 0,12 * * 0-4

  3. Comece a compilar diariamente no final da tarde entre 16:00 - 16:59 ou 16:00 -16: 59, dependendo do hash do projeto: H 16 * * 1-5

  4. Comece a construir à meia-noite: @midnight ou comece a construir à meia-noite, todos os sábados: 59 23 * * 6

  5. Todo primeiro dia de cada mês entre as 2:00 e as 02:30: H (0,30) 02 01 * *

Nagarjuna Yalamanchili
fonte
1
boa explicação.
vivek 29/10
10

As etapas para agendar trabalhos em Jenkins:

  1. clique em "Configurar" do requisito do trabalho
  2. role para baixo até " Criar gatilhos " - legenda
  3. Clique na caixa de seleção Build periodicamente
  4. Adicione agendamento de horário no campo Agendamento, por exemplo, @midnight

insira a descrição da imagem aqui

Nota : no campo agendamento, é possível ver a última e a próxima data / hora executadas.

Jenkins também suporta aliases predefinidos para agendar a construção:

@hourly, @daily, @weekly, @monthly,@midnight

@hourly -> Construa a cada hora no início da hora -> 0 * * * *

@daily, @midnight -> Construa todos os dias à meia-noite -> 0 0 * * *

@weekly -> Construir todas as semanas à meia-noite no domingo de manhã -> 0 0 * * 0

@monthly -> Construir todos os meses à meia-noite do primeiro dia do mês -> 0 0 1 * *

Gavriel Cohen
fonte
à meia-noite é bem legal :) Jenkins parece reconhecer alguns valores especiais começando em @ incluindo @daily. Você pode postar um link para a lista definitiva?
Chrisinmtown
@chrisinmtown, aliases predefinidos A lista adicionado, esperançosamente, é útil para você :)
Gavriel Cohen
7

Para agendar um trabalho cron a cada 5 minutos, é necessário definir as configurações do cron assim:

*/5 * * * *
fduff
fonte
Quero executar o trabalho exatamente às 8:00 EST, para que a expressão cron que eu construí seja - 00 08 * * * está bom?
precisa saber é o seguinte
Infelizmente não o seu trabalho, anexado a tela tiro dele no post, btw estou testando-a com o tempo EST corrente ou seja, 04:20 algo ..
Sangram Anand
que horário EST é o mesmo fuso horário no servidor de compilação?
Fduff 18/09/12
sim, a hora é a mesma, entre * / 5 * * * * (a cada 5mts) funciona bem.
precisa saber é o seguinte
Para executar o trabalho exatamente às 8h EST, você deve fazer o seguinte: H (0-0) 8 * * *
AKS
3

Tente usar 0 8 * * *. Deveria funcionar

user1815823
fonte
2

Jenkins usa o formato Cron na programação. Você pode consultar este link para obter mais detalheshttps: //en.wikipedia.org/wiki/Cron. Mais uma coisa, Jenkins nos fornece uma visualização muito útil. Por favor, dê uma olhada na imagem. insira a descrição da imagem aqui

Espero que isso ajude. obrigado

Thuong Vo
fonte
como aplicar essas mudanças?
Balaji Boggaram Ramanarayan 27/10/19
-1

Para quem não quiser esperar a hora inteira para ver se uma construção específica é acionada:

Para obter o hash, você pode fazer o download do hasher aqui . Use o nome completo do projeto, conforme digitado na página da filial, e imprima-o assim:

System.out.println(Hash.from("sub/microservices/master"));
thoredge
fonte