首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在码头集装箱内使用cron

如何在码头集装箱内使用cron
EN

Stack Overflow用户
提问于 2019-07-10 12:18:19
回答 1查看 1.2K关注 0票数 2

我试着在码头图片“jenkinsci/蓝海洋”中添加crontab,但是在它之后,jenkins没有启动。问题在哪里?事先非常感谢您的帮助。

代码语言:javascript
复制
<Dockerfile>

FROM jenkinsci/blueocean:1.17.0
USER root
ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.9/supercronic-linux-amd64 \
    SUPERCRONIC=supercronic-linux-amd64 \
    SUPERCRONIC_SHA1SUM=5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85
 RUN curl -fsSLO "$SUPERCRONIC_URL" \
 && echo "${SUPERCRONIC_SHA1SUM}  ${SUPERCRONIC}" | sha1sum -c - \
 && chmod +x "$SUPERCRONIC" \
 && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
 && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic

ADD crontab /etc/crontab
CMD ["supercronic", "/etc/crontab"]

<crontab>
# Run every minute
*/1 * * * * echo "hello world"


commands:
$docker build -t jenkins_test .
$docker run -it -p 8080:8080 --name=container_jenkins jenkins_test
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-10 14:55:56

如果使用docker inspect jenkinsci/blueocean:1.17.0,它的切入点是:

代码语言:javascript
复制
"Entrypoint": [
    "/sbin/tini",
    "--",
    "/usr/local/bin/jenkins.sh"
],

因此,当启动容器时,它将首先执行下一个脚本。

/usr/local/bin/jenkins.sh:

代码语言:javascript
复制
#! /bin/bash -e

: "${JENKINS_WAR:="/usr/share/jenkins/jenkins.war"}"
: "${JENKINS_HOME:="/var/jenkins_home"}"
touch "${COPY_REFERENCE_FILE_LOG}" || { echo "Can not write to ${COPY_REFERENCE_FILE_LOG}. Wrong volume permissions?"; exit 1; }
echo "--- Copying files at $(date)" >> "$COPY_REFERENCE_FILE_LOG"
find /usr/share/jenkins/ref/ \( -type f -o -type l \) -exec bash -c '. /usr/local/bin/jenkins-support; for arg; do copy_reference_file "$arg"; done' _ {} +

# if `docker run` first argument start with `--` the user is passing jenkins launcher arguments
if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then

  # read JAVA_OPTS and JENKINS_OPTS into arrays to avoid need for eval (and associated vulnerabilities)
  java_opts_array=()
  while IFS= read -r -d '' item; do
java_opts_array+=( "$item" )
  done < <([[ $JAVA_OPTS ]] && xargs printf '%s\0' <<<"$JAVA_OPTS")

  readonly agent_port_property='jenkins.model.Jenkins.slaveAgentPort'
  if [ -n "${JENKINS_SLAVE_AGENT_PORT:-}" ] && [[ "${JAVA_OPTS:-}" != *"${agent_port_property}"* ]]; then
java_opts_array+=( "-D${agent_port_property}=${JENKINS_SLAVE_AGENT_PORT}" )
  fi

  if [[ "$DEBUG" ]] ; then
java_opts_array+=( \
  '-Xdebug' \
  '-Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=y' \
)
  fi

  jenkins_opts_array=( )
  while IFS= read -r -d '' item; do
jenkins_opts_array+=( "$item" )
  done < <([[ $JENKINS_OPTS ]] && xargs printf '%s\0' <<<"$JENKINS_OPTS")

  exec java -Duser.home="$JENKINS_HOME" "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"
fi

# As argument is not jenkins, assume user want to run his own process, for example a `bash` shell to explore this image
exec "$@"

从上面的脚本中可以看到,如果将CMD ["supercronic", "/etc/crontab"]添加到您自己的dockerfile中,那么当容器启动时,它等于执行next:

代码语言:javascript
复制
/usr/local/bin/jenkins.sh "supercronic" "/etc/crontab"

由于if [[ $# -lt 1 ]] || [[ "$1" == "--"* ]]; then不匹配,它将直接在最后一行执行exec "$@,这将导致jenkins start code永不执行。

要修复它,您必须使用自己的docker-entrypoint.sh来覆盖它的默认入口点:

docker-entrypoint.sh:

代码语言:javascript
复制
#!/bin/bash

supercronic /etc/crontab &
/usr/local/bin/jenkins.sh

文档:

代码语言:javascript
复制
FROM jenkinsci/blueocean:1.17.0
USER root
ENV SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/v0.1.9/supercronic-linux-amd64 \
    SUPERCRONIC=supercronic-linux-amd64 \
    SUPERCRONIC_SHA1SUM=5ddf8ea26b56d4a7ff6faecdd8966610d5cb9d85
RUN curl -fsSLO "$SUPERCRONIC_URL" \
 && echo "${SUPERCRONIC_SHA1SUM}  ${SUPERCRONIC}" | sha1sum -c - \
 && chmod +x "$SUPERCRONIC" \
 && mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" \
 && ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic

ADD crontab /etc/crontab
COPY docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/sbin/tini", "--", "/docker-entrypoint.sh"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56970543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档