Docker安裝jenkins

1. Dockerfile

FROM openjdk:11

# 安裝 curl 和 vim
RUN apt-get update && apt-get install -y git curl && echo "Y" | apt-get install vim && rm -rf /var/lib/apt/lists/*

# build參數(shù)
ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000
ARG http_port=8080
ARG agent_port=50000
# 默認(rèn)下載最新版本
ARG JENKINS_VERSION=latest
# 默認(rèn)分配1G內(nèi)存
ARG JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true"
# Jenkins配置保留參數(shù)
ARG JENKINS_OPTS
# jenkins下載url
ARG JENKINS_URL=https://get.jenkins.io/war-stable/${JENKINS_VERSION}/jenkins.war
ARG JENKINS_SHA_URL=https://get.jenkins.io/war-stable/${JENKINS_VERSION}/jenkins.war.sha256

# Maven版本號
ARG MAVEN_VERSION=3.8.2
ARG MAVEN_URL=https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz
ARG MAVEN_SHA_URL=https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz.sha512

#設(shè)置鏡像的時區(qū)
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo 'Asia/Shanghai' > /etc/timezone
# 設(shè)置jenkins目錄
ENV JENKINS_HOME /var/jenkins_home
# 設(shè)置slave agent port
ENV JENKINS_SLAVE_AGENT_PORT ${agent_port}


# 創(chuàng)建Jenkins用戶和組
RUN groupadd -g ${gid} ${group} \
    && useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}

# jenkins卷掛載目錄
VOLUME /var/jenkins_home

# 創(chuàng)建jenkins下載目錄
RUN mkdir -p /usr/share/jenkins
# 下載jenkins并驗證sha256
RUN curl -fsSL ${JENKINS_URL} -o /usr/share/jenkins/jenkins.war \
&& curl -fsSL ${JENKINS_SHA_URL} -o /usr/share/jenkins/jenkins.war.sha256 \
&& cd /usr/share/jenkins \
&& cat /usr/share/jenkins/jenkins.war.sha256 | sha256sum -c -

# 下載maven并驗證sha512
RUN curl -fsSL ${MAVEN_URL} -o /usr/share/jenkins/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& curl -fsSL ${MAVEN_SHA_URL} -o /usr/share/jenkins/apache-maven-${MAVEN_VERSION}-bin.tar.gz.sha512 \
&& cd /usr/share/jenkins \
&& echo " apache-maven-${MAVEN_VERSION}-bin.tar.gz" >> apache-maven-${MAVEN_VERSION}-bin.tar.gz.sha512 \
&& sha512sum -c apache-maven-${MAVEN_VERSION}-bin.tar.gz.sha512 \
&& tar xvf apache-maven-${MAVEN_VERSION}-bin.tar.gz \
&& mv apache-maven-${MAVEN_VERSION} maven

# 如果主機(jī)需要替換settings.xml可以通過綁定掛載覆蓋
ADD --chown=${user}:${group} settings.xml /usr/share/jenkins/maven/conf/settings.xml
ENV MVN_HOME /usr/share/jenkins/maven
ENV PATH $PATH:$MVN_HOME/bin

# docker host 默認(rèn)bridge網(wǎng)絡(luò)下主機(jī)局域網(wǎng)ip, 自定義網(wǎng)絡(luò)可在docker run中設(shè)置-e DOCKER_HOST=xxxx 覆蓋
# Jenkins使用maven來build鏡像的時候,因為容器里沒有安裝docker所以通過docker主機(jī)來build
ENV DOCKER_HOST tcp://172.17.0.1:2375

# jenkins應(yīng)用服務(wù)端口
EXPOSE ${http_port}

# slave agents端口:
EXPOSE ${agent_port}

USER ${user}

WORKDIR /var/jenkins_home

CMD java ${JAVA_OPTS} -jar /usr/share/jenkins/jenkins.war ${JENKINS_OPTS}
#ENTRYPOINT ["java", "-jar", "/usr/share/jenkins/jenkins.war"]

2. build鏡像

docker build -t jenkins .

3. 運(yùn)行容器

docker run -d \
-v jenkins:/var/jenkins_home \
-p 7070:8080 \
-p 5000:5000 \
--name jenkins \
jenkins

這里為什么不通過docker主機(jī)共享maven, 因為通過綁定掛載的方式共享會涉及寫操作的權(quán)限問題而且還要在主機(jī)配置maven麻煩,所以選擇容器內(nèi)下載安裝,一切所需都在鏡像里。 如果要在主機(jī)共享maven的settings.xml配置文件,把本地倉庫路徑配置為${user.home}/路徑下目錄就不涉及權(quán)限問題。

另外說明一下,如果在jenkins里使用maven插件dockerfile-maven-plugin構(gòu)建應(yīng)用鏡像需要在docker主機(jī)配置endpoint,并為容器設(shè)置DOCKER_HOST環(huán)境變量,因為容器內(nèi)沒有安裝docker,這個我在Dockerfile也有備注。

docker主機(jī)配置endpoint方法如下:

  • 修改daemon.json配置
vi /etc/docker/daemon.json 

往daemon.json 添加hosts配置:

{
   "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}
  • 重啟使配置生效
systemctl daemon-reload     
systemctl restart docker.service

注意: 現(xiàn)在DockerDesktop版本好像是不支持修改hosts配置的,如果在mac里要使用endpoint可以使用docker-machine配置虛擬機(jī)的方式,比較麻煩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容