-
前言
此文章仅仅是自己想弄一套自己构建程序
-
第一步
当前是自己写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"]
在创建容器的时候指定挂载一下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