Necesito programar un trabajo cada hora en jenkins

16

Soy nuevo en Jenkins. Tengo un trabajo que necesito programar cada 1 hora.

estoy usando

* */1 * * * 

pero no funciona de manera efectiva.

Proporcione cualquier otra solución.

Ajay
fuente
3
debe explicar qué "pero no funciona de manera efectiva". medio. Y agregue sus entradas de distro y cronttab
Sathyajith Bhat
use @hourlyor0 * * * *
Renju Chandran chingath
Gracias. Mencione la sintaxis, si quiero programar cada 3 horas.
Ajay
Uso: H / 60 * * * *
Eyal Sooliman

Respuestas:

31

Jenkins usa la expresión cron como se explica aquí

Para programar cada hora, entonces puedes poner

0 * * * *

Entonces su trabajo se ejecutará cada hora (07:00, 08:00, 09:00 y así sucesivamente)

ACTUALIZAR

Como explicación sobre su configuración original, sintaxis

* */1 * * *

ejecutará el trabajo cada minuto.

ACTUALIZACIÓN 2

Como se solicitó en el comentario, aquí la sintaxis para programarlo cada 3 horas

0 */3 * * *

La sintaxis */nsignifica que los trabajos se programarán cada nhora

masegaloeh
fuente
Gracias por la respuesta. Está funcionando bien. Pero mi trabajo tarda más de una hora en ejecutarse. Por ejemplo, si quiero programar este trabajo para cada 3 horas, ¿cuál sería la sintaxis?
Ajay
Compruebe mi respuesta actualizada :)
masegaloeh
@Ajay Si esta respuesta funciona para su problema, considere aceptar esta respuesta :)
masegaloeh
14

Jenkins sugiere de esta manera:

H * * * *
Ruby232
fuente
2
La misma respuesta que otras respuestas a una pregunta que tiene más de 1 año.
JakeGould
Esto duplica otra respuesta y no agrega contenido nuevo. No publique una respuesta a menos que realmente tenga algo nuevo que aportar.
DavidPostill
44
La ventaja de este enfoque es que jenkins gestionará las tareas en una cola. Tal vez alguien más ya tenía la respuesta, pero aún es útil. ¿Por qué ser tan duro si es útil? la respuesta con 20 me gusta NO es tan buena ... bah
juan Isaza
Tengo que ir con @juanIsaza. Este no es un duplicado, sino una mejor respuesta. Jenkins sugiere claramente preferir el uso de Hvalores codificados en lugar de valores
rígidos
9

Sé que este es un hilo viejo pero estoy respondiendo porque aparentemente la gente todavía aterriza aquí.

La respuesta principal ya no debería usarse.

Jenkins introdujo un valor H.

Este campo sigue la sintaxis de cron (con pequeñas diferencias). Específicamente, cada línea consta de 5 campos separados por TAB o espacios en blanco:

MINUTO HORA DOM MES DOW

  • MINUTO Minutos dentro de la hora (0–59)
  • HORA La hora del día (0–23)
  • DOM El día del mes (1–31)
  • MES El mes (1–12)
  • DOW El día de la semana (0–7) donde 0 y 7 son domingos.

Para especificar varios valores para un campo, están disponibles los siguientes operadores. En el orden de precedencia,

  • * especifica todos los valores válidos
  • M-N especifica un rango de valores
  • M-N/Xo */Xpasos por intervalos de X a través del rango especificado o rango válido completo
  • A,B,...,Z enumera múltiples valores

Para permitir que las tareas programadas periódicamente produzcan una carga uniforme en el sistema, el símbolo H (para "hash") debe usarse siempre que sea posible. Por ejemplo, usar 0 0 * * * para una docena de trabajos diarios causará un gran aumento a la medianoche. En contraste, usar HH * * * aún ejecutaría cada trabajo una vez al día, pero no todos al mismo tiempo, mejor usando recursos limitados.

El símbolo H se puede usar con un rango. Por ejemplo, HH (0-7) * * * significa algún tiempo entre las 12:00 a.m. (medianoche) y las 7:59 a.m. También puede usar intervalos de pasos con H, con o sin rangos.

El símbolo H puede considerarse como un valor aleatorio en un rango, pero en realidad es un hash del nombre del trabajo, no una función aleatoria, por lo que el valor permanece estable para cualquier proyecto dado.

Tenga en cuenta que para el campo del día del mes, los ciclos cortos como * / 3 o H / 3 no funcionarán de manera consistente cerca del final de la mayoría de los meses, debido a la duración variable de los meses. Por ejemplo, * / 3 se ejecutará los días 1, 4, ... 31 días de un mes largo, luego nuevamente el día siguiente del mes siguiente. Los hashes siempre se eligen en el rango de 1-28, por lo que H / 3 producirá una brecha entre las ejecuciones de entre 3 y 6 días al final de un mes. (Los ciclos más largos también tendrán longitudes inconsistentes, pero el efecto puede ser relativamente menos notable).

Entonces la respuesta correcta para construir una vez por hora es

H * * * *

por cada 3 horas

H H/3 * * *

La diferencia entre *y Htambién podría explicarse como

  • *se traduce a CADA
  • Hse traduce a CUALQUIERA

Entonces eg

* * * * *

se traduce en: Construir cada minuto, cada hora, todos los días del mes, todos los meses, no importa qué día de la semana sea.

H * * * *

se traduce en: Construir una vez cada hora (x), no importa qué minuto exacto sea (puede ser cualquier minuto entre x: 00 yx: 59)

H H * * *

se traduce en: Construir una vez al día, no importa qué hora sea (puede ser cualquier minuto y cualquier hora entre las 00:00 y las 23:59)


La razón por la que debería preferir usar Hvalores de tiempo en lugar de codificados también se explica como antes

Si tiene 100 trabajos configurados con

0 0 * * *

todos tratarán de comenzar al mismo tiempo causando, por ejemplo, una gran cantidad de encuestas y atraer tráfico a la medianoche.

Si los tiene en su lugar, todos configurados

H H * * *

Todos se construirán una vez al día, pero no todos al mismo tiempo, sino que se distribuirán a lo largo del día.


Rango de tiempo programado

Puede planificar mejor el calendario utilizando los rangos de tiempo, por ejemplo

H H(18-23) * * *

Todos los trabajos se construirán todos los días en cualquier momento entre las 18:00 y las 23:59.


Programar rango de tiempo cruzando la medianoche

Incluso es posible programar trabajos que cruzan la medianoche, por ejemplo, para construir entre las 19:00 p.m. y las 5:00 a.m.

Pero dado que cron generalmente no permite esto, puede usar un truco usando una zona horaria shiftet.

Por ejemplo, estoy viviendo en la zona horaria MEZ que es GMT + 1 y quiero crear todos los trabajos entre las 19:00 p.m. y las 5:00 a.m. Para hacerlo, cambio mi zona horaria completa por 5 horas usando

TZ=Etc/GMT+6

Luego uso un rango de desplazamiento para las horas que comienzan a las 14:00 (-> +5 = 19:00 pm) y terminan a las 23:59 (-> +5 = 4:59 am)

H H(14-23) * * *
derHugo
fuente
-1
* */1 * * *

es correcto, funciona cada hora

Intente usar la función H para que todo el trabajo no sondee al mismo tiempo a svn

H H/1 * * *

Debería hacer magia. Si el trabajo tarda más en finalizar o si está haciendo la funcionalidad de activación de compilación. Aumente el tiempo o use el complemento jenkins para detener la compilación hasta que finalice la compilación anterior.

https://wiki.jenkins-ci.org/display/JENKINS/Build+Blocker+Plugin

jin T
fuente
El primero se ejecuta cada minuto entre la 1:00 a.m. y las 2:00 a.m., ¿verdad?
Eric Wang
@EricWang: No. Es lo mismo que * * * * *=> corriendo cada minuto. Para correr entre cierto rango, lo usa como * 1-2 * * *<- esto se ejecuta cada minuto entre la 1:00 a.m. y la 1:59 a.m.
derHugo
@derHugo ¿Quieres decir * * 1-2 * *?
Eric Wang
1
@EricWang No, quiero decir * 1-2 * * *. La primera posición es para Minute of our, la segunda para hour of day, la tercera day of month, cuarta month of yeary quinta day of week(en casos especiales también permite una sexta year). Por lo que su línea * * 1-2 * *se traduce "cada minuto, cada hora, el primer y segundo día de cada mes y cualquier día de la semana.
derHugo
1
La diferencia que perdió el autor de esta respuesta es que se *traduce a everymientras que se Htraduce a any. Entonces, mientras que * * * * *significa cada minuto, H * * * *significa construir una vez cada hora, pero no me importa el minuto exacto (puede estar entre 0-59 si no está definido por un rango) y H H * * *significa construir una vez al día, pero no me importa a qué hora.
derHugo
-5

La sintaxis es:


MINUTE  Minutes within the hour (0-59)
HOUR    The hour of the day (0-23)
DOM     The day of the month (1-31)
MONTH   The month (1-12)
DOW     The day of the week (0-7) where 0 and 7 are Sunday.

Si desea programar cada 3 horas, la sintaxis debería verse:

* 3 * * * *
narasimha Rao
fuente
44
Esto programará para las 3 AM todos los días, y no cada 3 horas
lony