我正在编写一个脚本来下载 jenkins war,跳过设置,然后为其安装插件。
我使用一些链接下载了 batch-install-jenkins-plugins.sh,并且还创建了如上所述的 plugins.txt 文件。
当我使用 docker 运行脚本时,它给出一个错误,提示“您必须指定 plugins.txt”。
这是我的脚本:
FROM ubuntu:14.04
# Install Java.
RUN \
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections && \
apt-get update && \
apt-get upgrade -y && \
apt-get install -y software-properties-common && \
add-apt-repository ppa:webupd8team/java -y && \
apt-get update && \
apt-get install -y oracle-java8-installer && \
rm -rf /var/lib/apt/lists/* && \
rm -rf /var/cache/oracle-jdk8-installer
# Define commonly used JAVA_HOME variable
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle
# get maven 3.2.2 and verify its checksum
RUN wget --no-verbose -O /tmp/apache-maven-3.2.2.tar.gz http://archive.apache.org/dist/maven/maven-3/3.2.2/binaries/apache-maven-3.2.2-bin.tar.gz; \
echo "87e5cc81bc4ab9b83986b3e77e6b3095 /tmp/apache-maven-3.2.2.tar.gz" | md5sum -c
ARG BASE_URL=https://apache.osuosl.org/maven/ven-3/${MAVEN_VERSION}/binaries
# install maven
RUN tar xzf /tmp/apache-maven-3.2.2.tar.gz -C /opt/; \
ln -s /opt/apache-maven-3.2.2 /opt/maven; \
ln -s /opt/maven/bin/mvn /usr/local/bin; \
rm -f /tmp/apache-maven-3.2.2.tar.gz
ENV MAVEN_HOME /opt/maven
# Install dependencies
RUN apt-get -y update && \
apt-get -yqq --no-install-recommends install bash git bzip2 curl unzip && \
apt-get update
# copy jenkins war file to the container
#ADD http://mirrors.jenkins.io/war-stable/2.107.1/jenkins.war /opt/jenkins.war
COPY jenkins.war /opt/jenkins.war
ENV JENKINS_HOME /jenkins
# configure the container to run jenkins, mapping container port 8080 to that host port
RUN mkdir /jenkins/
COPY proxy.xml /jenkins/proxy.xml
COPY config_updated.xml opt/config_updated.xml
COPY settings.xml /usr/share/maven/conf/settings.xml
ENTRYPOINT ["java","-jar","/opt/jenkins.war"]
ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false"
#Install plugins
RUN cd /usr/local/bin && curl -L https://raw.githubusercontent.com/hgomez/devops-incubator/master/forge-tricks/batch-install-jenkins-plugins.sh -o batch-install-jenkins-plugins.sh
RUN chmod +x /usr/local/bin/batch-install-jenkins-plugins.sh
COPY /plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN xargs /usr/local/bin/batch-install-jenkins-plugins.sh < /usr/share/jenkins/ref/plugins.txt
RUN echo 2.0 > /usr/share/jenkins/ref/jenkins.install.UpgradeWizard.state
当我构建上述脚本的图像时,出现以下错误:
Step 21/23 : RUN xargs /usr/local/bin/batch-install-jenkins-plugins.sh < /usr/share/jenkins/ref/plugins.txt
---> Running in 72d198deef6b
You must provide plugin file
usage: batch-install-jenkins-plugins.sh options
Install or update Jenkins Plugins.
OPTIONS:
-p --plugins file containing plugins list
-x --xplugins file containing excluded plugins list
-d --plugindir directory where to deploy plugins (.jpi)
Examples:
**Run:batch-install-jenkins-plugins.sh --plugins okplugins --excludedplugins nokplugins --plugindir /var/lib/myjenkins/plugins
The command '/bin/sh -c xargs /usr/local/bin/batch-install-jenkins-plugins.sh < /usr/share/jenkins/ref/plugins.txt' returned a non-zero code: 123**
检查我是否注释了该行并将 ENTRYPOINT 更改为 bash 并进行检查,发现 plugins.txt 仅存在于该位置
当我在浏览器中启动它时,我需要从 plugins.txt 中获取参数并将这些插件安装到 jenkins 中。
文章我用来参考一下。
提前谢谢您,如果英文有误,请见谅。
答案1
我不太清楚你的构建出了什么问题,但你的 Jenkins Dockerfile 看起来不必要地复杂。这是一个可以完成你想要的操作的简单 Dockerfile:
FROM jenkins/jenkins:lts
COPY plugins.txt /usr/share/jenkins/ref/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
这将安装在 中定义的插件plugins.txt
。
这应该足以自动安装你的插件。但是如果你想从配置文件配置完整的 Jenkins 实例,请查看此Jenkins 插件这使得 Jenkins 完全从 YAML 进行配置。
答案2
您可以直接使用jenkins-plugin-cli并使用 --plugins 参数列出所需的插件,如下所示
RUN jenkins-plugin-cli --plugins \
antisamy-markup-formatter \
ant:475.vf34069fef73c
或者如上所述将它们列在 .txt 文件中并使用 jenkins-plugin-cli --plugin-file 参数jenkins-plugin-cli --plugin-file /your/path/to/plugins.txt
这两种方法都可以,但我个人倾向于使用第一种方法,下面是示例Dockerfile
答案3
xargs
通过创建新的命令行并运行它来工作。它创建命令行的方式是使用作为命令行给出的参数启动它正在创建的新命令行xargs
,然后附加它可以添加的最大 stdin 块(请记住,如果 stdin 大于最大命令行长度,则无法简单地使用所有 stdin,必须将其切碎以适合有效的最大命令行长度。)
剧本batch-install-jenkins-plugins.sh
(我是从这里,您应该提供您从哪里获取的链接,因为该脚本可能有很多变体)没有提供任何选项,-p
因此它会因缺少而死亡-p pluginfile.txt
。
RUN xargs /usr/local/bin/batch-install-jenkins-plugins.sh < /usr/share/jenkins/ref/plugins.txt
你确定你甚至应该在这里使用xargs
吗?我认为这才是你真正想做的事情:
RUN /usr/local/bin/batch-install-jenkins-plugins.sh -p /usr/share/jenkins/ref/plugins.txt
但是然后你可能会因为缺少-z plugindir
选项而崩溃,你也应该将其添加到你的Dockerfile
。