Jenkins的Docker容器添加dotnet-sdk和git


  • 前言

  此文章僅僅是自己想弄一套自己構建程序

  •      第一步

     當前是自己寫Dockerfile了。docker的倉庫里面雖然有Jenkins的鏡像。但是那鏡像里面沒有我們.netcore的構建環境。所以了,我需要做一個自己的鏡像

     在https://hub.docker.com中找Jenkins的基礎鏡像。好像沒幾個版本直接用最新的版本。

    然后開始編寫Dockerfile

    

#此鏡像從jenkin中構建,添加dotnetcore build環境和git
#VERSION 1
#Author: txb
#

#基礎鏡像
FROM jenkins


#使用root管理員
USER root
#清除了基礎鏡像設置的源,切換成騰訊雲的jessie源
#使用非騰訊雲環境的需要將 tencentyun 改為 aliyun
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list

#https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
#官方操作
RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg \
&& mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/ \
&& wget -q https://packages.microsoft.com/config/debian/9/prod.list \
&& mv prod.list /etc/apt/sources.list.d/microsoft-prod.list \
&& chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg \
&& chown root:root /etc/apt/sources.list.d/microsoft-prod.list

#更新源,安裝dotnet-sdk RUN apt-get update && apt-get install -y dotnet-sdk-2.2

  沒寫完,先保存一下build一下看看會不會報錯

#后面有個點.
docker build -t txb-jenkins .

  執行完了,還真報了一個錯

 

E: The method driver /usr/lib/apt/methods/https could not be found.
E: Failed to fetch https://packages.microsoft.com/debian/9/prod/dists/stretch/InRelease
E: Some index files failed to download. They have been ignored, or old ones used instead.
The command '/bin/sh -c apt-get update && apt-get install -y dotnet-sdk-2.2' returned a non-zero code: 100

  看着像是應該缺少什么東西來訪問https的地址,百度了一下,還是真是缺少 apt-transport-https,沒有,那么我先裝上唄,修改Dockerfile 

  在安裝dotnet-sdk前面增加一句再重新build(最好不要這么去干,我試過了,總共下來的鏡像有2G多。。等待時間有點久,有耐性就試試)

RUN apt-get install -y apt-transport-https #這個也是會報錯的
RUN apt-get update && apt-get install -y apt-transport-https

  然后就是有點漫長的等待。不着急

   接下來,我們添加git進去,Debian嘛,安裝套一樣

  完整的Dockerfile文件

#此鏡像從jenkin中構建,添加dotnet-sdk環境和git
#VERSION 1 #Author: txb # #基礎鏡像 FROM jenkins #使用root管理員 USER root #清除了基礎鏡像設置的源,切換成騰訊雲的jessie源 #使用非騰訊雲環境的需要將 tencentyun 改為 aliyun RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \ && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \ && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \ && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list RUN apt-get update && apt-get -y install apt-transport-https #安裝dotnet-sdk環境參照官方操作文檔 #https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg \ && mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/ \ && wget -q https://packages.microsoft.com/config/debian/9/prod.list \ && mv prod.list /etc/apt/sources.list.d/microsoft-prod.list \ && chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg \ && chown root:root /etc/apt/sources.list.d/microsoft-prod.list #安裝dotnet-sdk和git RUN apt-get update && apt-get install -y dotnet-sdk-2.2 git #入口操作 ENTRYPOINT ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]

開始構建容器

docker run -d -p 8000:8080 -v /home/jenkins_home:/var/jenkins_home --name csit-dotnet-jenkins dotnet-jenkins

  docker run -d -p 4040:8080 -v /home/jenkins/jenkins_home:/var/jenkins_home -v /home/jenkins/jenkins_publish:/home/jenkins_publish  --name csit-dotnet-jenkins --privileged=true dotnet-jenkins

  docker run -d -p 4040:8080 -v /home/app/:/home/jenkins_publish  --name csit-dotnet-jenkins --privileged=true dotnet-jenkins

說明:-d:后台運行

          -p:端口映射8000:8080    宿主主機端口8000,容器端口8080

          -v:映射目錄  主機目錄/home/jenkins_home  ,容器目錄/var/jenkins_home

          --name:創建出容器的名字

          --privileged=true:應該跟權限有關,如果不帶此參數的話,在啟動容器的時候容器訪問/home/jenkins_home會拋出一個permission deny問題

          dotnet-jenkins:鏡像名稱

補充一個問題:

   后續在使用容器運行web的時候,Jenkins里面也需要使用宿主主機的docker命令,我不可能再Jenkins容器里面再裝一個docker把后面百度了一下好像在容器內部使用docker命令也是可行

貼出一個文章連接https://www.cnblogs.com/leolztang/p/6934694.html

按照作者的思路,我又從新編輯了一下我的Dockerfile

#此鏡像從jenkin中構建,添加dotnetcore build環境和git
#VERSION 1
#Author: txb
#

#基礎鏡像
FROM jenkins
#使用root管理員
USER root


#清除了基礎鏡像設置的源,切換成騰訊雲的jessie源
#使用非騰訊雲環境的需要將 tencentyun 改為 aliyun
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list

RUN apt-get update && apt-get -y install apt-transport-https

#安裝dotnet-sdk環境參照官方操作文檔
#https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg \
&& mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/ \
&& wget -q https://packages.microsoft.com/config/debian/9/prod.list \
&& mv prod.list /etc/apt/sources.list.d/microsoft-prod.list \
&& chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg \
&& chown root:root /etc/apt/sources.list.d/microsoft-prod.list

#安裝dotnet-sdk和git
RUN apt-get update && apt-get install -y dotnet-sdk-2.2 git libltdl7


#定義一個參數dockerGid
ARG dockerGid=999

#將docker內部的jenkins用戶添加到docker用戶組里面
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group

USER jenkins

#入口操作
ENTRYPOINT ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]

(后面更新dotnet3.1的Dockerfile)

在創建容器的時候指定掛載一下docker目錄

創建容器的命令如下:

docker run --name csit-dotnet-jenkins --privileged=true -d -p 4040:8080 -v /home/app:/home/jenkins_publish -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker dotnet-jenkins

 

2020年6月12日 16:19:10更新安裝dotnet3.1的Dockerfile

#此鏡像從jenkin中構建,添加dotnetcore build環境和git
#VERSION 1
#Author: txb
#

#基礎鏡像
FROM jenkins/jenkins:lts
#使用root管理員
USER root

#清除了基礎鏡像設置的源,切換成騰訊雲的jessie源
#使用非騰訊雲環境的需要將 tencentyun 改為 aliyun
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list

RUN apt-get update && apt-get -y install apt-transport-https

#安裝dotnet-sdk環境參照官方操作文檔
#https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
#RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.asc.gpg \
#&& mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/ \
#&& wget -q https://packages.microsoft.com/config/debian/9/prod.list \
#&& mv prod.list /etc/apt/sources.list.d/microsoft-prod.list \
#&& chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg \
#&& chown root:root /etc/apt/sources.list.d/microsoft-prod.list
#安裝dotnet-sdk和git
#RUN apt-get update && apt-get install -y dotnet-sdk-2.2 git libltdl7
#定義一個參數dockerGid
#ARG dockerGid=999
#將docker內部的jenkins用戶添加到docker用戶組里面
#RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group

#更新安裝dotnet-sdk3.1
#https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-debian#debian-10-
RUN wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb \
&& dpkg -i packages-microsoft-prod.deb
#安裝dotnet-sdk和git
RUN apt-get update && apt-get install -y apt-transport-https && apt-get update && apt-get install -y dotnet-sdk-3.1 git libltdl7
#定義一個參數dockerGid
ARG dockerGid=999
#將docker內部的jenkins用戶添加到docker用戶組里面
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group


#安裝Nodejs
#RUN curl -sL https://rpm.nodesource.com/setup_8.x | bash - \
#&& yum install nodejs
ADD ./node-v10.15.1-linux-x64.tar /home
RUN ln -s /home/node-v10.15.1-linux-x64/bin/node /usr/local/bin/node \
&& ln -s /home/node-v10.15.1-linux-x64/bin/npm /usr/local/bin/npm
#RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - \
#&& apt-get install -y nodejs


#Jenkins時區問題
RUN rm -rf /etc/localtime && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo 'Asia/Shanghai' > /etc/timezone 

USER jenkins

#入口操作
ENTRYPOINT ["/bin/tini", "--", "/usr/local/bin/jenkins.sh"]



#創建容器命令如下
#docker run --name csit-dotnet-jenkins --privileged=true -d -p 4040:8080 
#-v /home/app:/home/jenkins_publish     #程序目錄
#-v /home/jenkins/jenkins_home:/var/jenkins_home #jenkins目錄
#-v /var/run/docker.sock:/var/run/docker.sock   #docker命令
#-v $(which docker):/usr/bin/docker                    #docker命令
#-v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
#dotnet-jenkins
#docker run --name csit-dotnet-jenkins --privileged=true -d -p 4040:8080 -v /home/app:/home/jenkins_publish -v /home/jenkins/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -v /usr/local/bin/docker-compose:/usr/local/bin/docker-compose dotnet-jenkins

 2020年6月13日 更新:

使用官方的jenkins鏡像后面嘗試一堆插件安裝失敗,百度發現其實已經有人遇到這寫問題了(  https://www.jianshu.com/p/9a3814c88bf2),其實就是jenkins版本太低了

解決方法,一個是自己官網下載包,然后打包成鏡像,二種就是用別人的,我圖懶,就用別人的了

所以修改jenkins的基礎鏡像 

FROM jenkins/jenkins:lts

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM