構建一個屬於本身的Jenkins鏡像

本文目標

不使用Jenkins官方提供的鏡像,從最簡系統鏡像搭建一個最新穩定版的Jenkins鏡像,自定義鏡像內有的工具如jdk、gradle、node等,使用Dockfile與Shell腳本搭建而成html

自定義的緣由是官方鏡像不能知足咱們對於鏡像內部工具的需求java

本文面向

面向對象:smile: ——本文面向有定製Jenkins鏡像需求的小白兔,大神請輕噴~node

環境說明

操做系統:Centos 7linux

Docker版本:19.03.5git

鏡像內部依賴說明

基礎系統鏡像:ubuntu:bionic, 也就是18.04 LTSdocker

Gradle: gradle-6.0.1shell

JDK: jdk1.8.0_221npm

Node: node-v11.4.0ubuntu

Jenkins: 最新stable warvim

Dockerfile:構建鏡像的藍圖

FROM ubuntu:bionic #基礎鏡像

#修改國內源,清華大學的
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等經常使用工具,並添加中文語言包
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
    
#工做目錄設置,至關於設置相對路徑,沒以/開頭的路徑都在/usr/local下
WORKDIR /usr/local

#建立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的區別在於ADD會解壓tar.gz、xz等linux下的壓縮包,COPY僅是複製
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/
#啓動容器中的Jenkins腳本,這個腳本後邊給出
COPY ./docker-entrypoint.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

#容器入口,執行上邊複製到/的腳本
ENTRYPOINT [ "/bin/bash", "/docker-entrypoint.sh" ]

docker-entrypoint.sh :啓動時必經的風景

#!/bin/bash
#自定義Jenkins工程入口腳本
#@author hellxz

#取/etc/profile最後一行的值,默認爲fi,當其值變爲export說明這是此容器非第一次啓動,初始化操做可免
env_export=$(tail /etc/profile -n 1)
result=$(echo $env_export | grep "export")
if [[ "$result" == "" ]]
then
	#gradle的zip壓縮包用ADD複製也沒有被解壓……手動解壓吧
    echo "解壓gradle"
    unzip -oq /usr/local/gradle/*.zip -d /usr/local/gradle/
    rm -f /usr/local/gradle/*.zip
    echo "正在設置環境變量......"
    #這裏取了上邊的環境變量值,寫入到/etc/profile中,令配置全局生效
    echo "export PATH=$JAVA_HOME/bin:$GRADLE_HOME/bin:$NODE_HOME/bin:$NPM_GLOBAL_PATH/bin:$PATH" >> /etc/profile
    #刷新系統配置,使環境變量生效
    source /etc/profile
    #設置npm全局緩存目錄
    npm config set cache "$NPM_CACHE_PATH"
    #設置npm全局安裝目錄,防止npm install -g 某軟件 後沒法直接執行
    npm config set prefix "$NPM_GLOBAL_PATH"
else
	#非初次進入容器,須要手動刷新下環境變量,否則無效
    source /etc/profile
fi

echo "正在啓動jenkins......"
#直接啓動jenkins,其實原本打算不輸出日誌的,用的nohup,可是吧,它直接就退出容器了……
java -DJENKINS_HOME=$JENKINS_WORKSPACE -jar $JENKINS_WAR_HOME/jenkins.war --httpPort=8008

最後

寫得比較粗糙,若是你有更好的寫法,歡迎評論交流

**本文禁止轉載,本文地址 https://www.cnblogs.com/hellxz/p/custom_self_needed_jenkins.html **

原文出處:https://www.cnblogs.com/hellxz/p/custom_self_needed_jenkins.html

相關文章
相關標籤/搜索