构建一个属于自己的Jenkins镜像
生活随笔
收集整理的這篇文章主要介紹了
构建一个属于自己的Jenkins镜像
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
本文目標(biāo)
不使用Jenkins官方提供的鏡像,從最簡(jiǎn)系統(tǒng)鏡像搭建一個(gè)最新穩(wěn)定版的Jenkins鏡像,自定義鏡像內(nèi)有的工具如jdk、gradle、node等,使用Dockfile與Shell腳本搭建而成
自定義的原因是官方鏡像不能滿足我們對(duì)于鏡像內(nèi)部工具的需求
本文面向
面向?qū)ο?#x1f604; ——本文面向有定制Jenkins鏡像需求的小白兔,大神請(qǐng)輕噴~
環(huán)境說(shuō)明
操作系統(tǒng):Centos 7
Docker版本:19.03.5
鏡像內(nèi)部依賴說(shuō)明
基礎(chǔ)系統(tǒng)鏡像:ubuntu:bionic, 也就是18.04 LTS
Gradle: gradle-6.0.1
JDK: jdk1.8.0_221
Node: node-v11.4.0
Jenkins: 最新stable war
Dockerfile:構(gòu)建鏡像的藍(lán)圖
FROM ubuntu:bionic #基礎(chǔ)鏡像#修改國(guó)內(nèi)源,清華大學(xué)的 RUN echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list && \echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list && \echo "deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list#安裝apt工具、vim、git、curl、unzip等常用工具,并添加中文語(yǔ)言包 RUN apt-get update && apt-get install -y apt-utils; \apt-get install -y vim git curl unzip && apt-get auto-clean; \apt-get install -y language-pack-zh-hans language-pack-zh-hans-base#工作目錄設(shè)置,相當(dāng)于設(shè)置相對(duì)路徑,沒(méi)以/開頭的路徑都在/usr/local下 WORKDIR /usr/local#創(chuàng)建jdk node gradle jenkins的war目錄,以及npm全局安裝位置與緩存 RUN mkdir jdk node gradle jenkins /root/.npm_global /root/.npm_caches#分別將gradle、jdk、node、jenkins.war、shell腳本放到剛才建好的目錄中 #ADD與COPY的區(qū)別在于ADD會(huì)解壓tar.gz、xz等linux下的壓縮包,COPY僅是復(fù)制 ADD ./gradle-6.0.1-bin.zip gradle/ ADD ./jdk-8u221-linux-x64.tar.gz jdk/ ADD ./node-v11.4.0-linux-x64.tar.gz node/ COPY ./jenkins.war jenkins/ #啟動(dòng)容器中的Jenkins腳本,這個(gè)腳本后邊給出 COPY ./docker-entrypoint.sh /#設(shè)置容器運(yùn)行時(shí)變量 ENV JAVA_HOME=/usr/local/jdk/jdk1.8.0_221 \GRADLE_HOME=/usr/local/gradle/gradle-6.0.1 \NODE_HOME=/usr/local/node/node-v11.4.0-linux-x64 \NPM_CACHE_PATH=/root/.npm_caches \NPM_GLOBAL_PATH=/root/.npm_global \JENKINS_WAR_HOME=/usr/local/jenkins \JENKINS_WORKSPACE=/var/lib/jenkins \TZ=Asia/Shanghai \LANG=zh_CN.UTF-8 \LANGUAGE=zh_CN:zh:en_US:en \LC_ALL=zh_CN.UTF-8#暴露端口 EXPOSE 8008#容器入口,執(zhí)行上邊復(fù)制到/的腳本 ENTRYPOINT [ "/bin/bash", "/docker-entrypoint.sh" ]docker-entrypoint.sh :啟動(dòng)時(shí)必經(jīng)的風(fēng)景
#!/bin/bash #自定義Jenkins工程入口腳本 #@author hellxz#取/etc/profile最后一行的值,默認(rèn)為fi,當(dāng)其值變?yōu)閑xport說(shuō)明這是此容器非第一次啟動(dòng),初始化操作可免 env_export=$(tail /etc/profile -n 1) result=$(echo $env_export | grep "export") if [[ "$result" == "" ]] then#gradle的zip壓縮包用ADD復(fù)制也沒(méi)有被解壓……手動(dòng)解壓吧echo "解壓gradle"unzip -oq /usr/local/gradle/*.zip -d /usr/local/gradle/rm -f /usr/local/gradle/*.zipecho "正在設(shè)置環(huán)境變量......"#這里取了上邊的環(huán)境變量值,寫入到/etc/profile中,令配置全局生效echo "export PATH=$JAVA_HOME/bin:$GRADLE_HOME/bin:$NODE_HOME/bin:$NPM_GLOBAL_PATH/bin:$PATH" >> /etc/profile#刷新系統(tǒng)配置,使環(huán)境變量生效source /etc/profile#設(shè)置npm全局緩存目錄npm config set cache "$NPM_CACHE_PATH"#設(shè)置npm全局安裝目錄,防止npm install -g 某軟件 后無(wú)法直接執(zhí)行npm config set prefix "$NPM_GLOBAL_PATH" else#非初次進(jìn)入容器,需要手動(dòng)刷新下環(huán)境變量,不然無(wú)效source /etc/profile fiecho "正在啟動(dòng)jenkins......" #直接啟動(dòng)jenkins,其實(shí)本來(lái)打算不輸出日志的,用的nohup,但是吧,它直接就退出容器了…… java -DJENKINS_HOME=$JENKINS_WORKSPACE -jar $JENKINS_WAR_HOME/jenkins.war --httpPort=8008最后
寫得比較粗糙,如果你有更好的寫法,歡迎評(píng)論交流
**本文禁止轉(zhuǎn)載,本文地址https://www.cnblogs.com/hellxz/p/custom_self_needed_jenkins.html **
總結(jié)
以上是生活随笔為你收集整理的构建一个属于自己的Jenkins镜像的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机小学期实践报告,北科大一小学期暑期
- 下一篇: 怎么查论文收录情况