容器版jenkins安装并且实现使用宿主机docker命令,采用的是docker outside deocker,带jdk、添加maven、git
- docker版jekins使用宿主机docker命令
- docker版jekins安装,实现CI/CD,也就是实现在容器里面使用宿主机docker命令,这样方式为:docker outside deocker
- 说明:FROM jenkinsci/jenkins 这个jenkins基础镜像用的系统是debain系统
- 必须按照下面过程来,否则报错
- 说明: 官方jenkins镜像本身自带jdk
- 环境:
- 192.168.0.97 centos7.5
- 1、安装docker
- 参照:https://www.cnblogs.com/effortsing/p/10013567.html
- 配置docker加速
- 参照:https://i.cnblogs.com/EditPosts.aspx?postid=10060610
- 拉取jenkins官方镜像:
- docker pull jenkinsci/jenkins
或者:
- 下载原始镜像
- 链接:https://pan.baidu.com/s/14z5BnFAXYoMnDoXbiNgmuQ
- 提取码:ecsq
- 导入镜像
- docker load < jenkinsci.tar/2、/2、/2查看镜像
- [root@bogon ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- jenkinsci/jenkins latest b589aefe29ff 3 months ago 703 MB
- 2、添加maven
- 方式一:(做成了,启动容器后可以看到mvn版本,但是版本低,不能选择版本)
cat>/home/jenkins-dockerfile/Dockerfile <<EOF
FROM jenkinsci/jenkins
USER root
RUN apt-get update && apt-get install -y libltdl7.*
RUN apt-git install vim -y
RUN apt-get install maven -y
RUN apt-get install git -y
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
EOF
- 上面dockerfile所做的事情如下:
- 安装libltdl7.*库、添加jenkins用户到docker组里面来实现使用宿主机的docker,安装maven工具,安装git工具
- 注意:如果制作好镜像后拉取代码报错没有git工具的时候, 上面的dockerfile中就应该安装git工具: RUN apt-get install git -y
- 方式二:(没做成,启动容器后看不到mvn版本,但是看网上都是这样做的)
- 准备maven安装包
- rz apache-maven-3.5.4-bin.tar.gz
- mkdir -p /home/jenkins-dockerfile/
- mv apache-maven-3.5.4-bin.tar.gz /home/jenkins-dockerfile/
- 编写dockerfile
- cat>/home/jenkins-dockerfile/Dockerfile <<EOF
- FROM jenkinsci/jenkins
- USER root
- RUN apt-get update && apt-get install -y libltdl7.*
- RUN apt-get install vim* -y
- ADD apache-maven-3.5.4-bin.tar.gz /usr/local/
- ENV MAVEN_HOME=/usr/local/apache-maven-3.5.4
- ENV PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
- ARG dockerGid=999
- RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
- RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
- EOF
- 上面构建完启动容器后没有mvn版本,按照下面构建完启动容器也是没有mvn版本,但是进入容器后加载下环境变量就会出现mvn版本,
- 各种尝试进行写dockerfile添加mvn,都是不行的,不要再试了,浪费时间,期待官方jenkins镜像带mvn
cat>/home/jenkins-dockerfile/Dockerfile <<EOF
FROM jenkinsci/jenkins
USER root
RUN apt-get update && apt-get install -y libltdl7.*
RUN apt-get install vim* -y
ADD apache-maven-3.5.4-bin.tar.gz /usr/local/
ARG dockerGid=999
RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
RUN echo "# set jdk、jre" >> /etc/profile
RUN echo "export JAVA_HOME=/docker-java-home/" >> /etc/profile
RUN echo "export JRE_HOME=/docker-java-home/" >> /etc/profile
RUN echo "export CLASSPATH=.:/docker-java-home/jre/lib/rt.jar:/docker-java-home/lib/dt.jar:/docker-java-home/lib/tools.jar" >> /etc/profile
RUN echo "export PATH=$PATH:/docker-java-home/bin" >> /etc/profile
RUN /bin/bash -c "source /etc/profile"
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN source /etc/profile
RUN echo "#set maven environment" >> /etc/profile
RUN echo "export MAVEN_HOME=/usr/local/apache-maven-3.5.4/" >> /etc/profile
RUN echo "export PATH=/usr/local/apache-maven-3.5.4/bin:/docker-java-home/jre/bin:/usr/local/apache-maven-3.5.4/bin:$PATH" >> /etc/profile
RUN /bin/bash -c "source /etc/profile"
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
RUN source /etc/profile
EOF
- 注意:上面Dockerfile中必须先执行apt-get update && apt-get install -y libltdl7.*,再安装maven,添加环境变量,否则会报如下错误:
- debconf: delaying package configuration, since apt-utils is not installed
- dpkg: warning: 'ldconfig' not found in PATH or not executable
- dpkg: warning: 'start-stop-daemon' not found in PATH or not executable
- E: Sub-process /usr/bin/dpkg returned an error code (2)
- The command '/bin/sh -c apt-get update && apt-get install -y libltdl7.*' returned a non-zero code: 100
- 说明:
- libltdl7.*: 如果没有安装这个库,进入容器内部执行docker命令会报错找不到这个库
- dockerGid=999 必须步骤
- echo "docker:x:${dockerGid}:jenkins" >> /etc/group 必须步骤
- 3、构建镜像
- docker build -t jenkinsci/jenkins:v1 /home/jenkins-dockerfile/
- 查看镜像
- [root@bogon ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- jenkinsci/jenkins v1 7b9560d56c4e 23 seconds ago 720 MB
- jenkinsci/jenkins latest b589aefe29ff 3 months ago 703 MB
- 4、启动容器
- docker run -d -p 8085:8080 --name jenkins --restart=always \
- -v /opt:/opt \
- -v $(which docker):/usr/bin/docker \
- -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/jenkins:v1
- 说明:
- /var/run/docker.sock 的作用就是让 Jenkins 能通过主机的 Docker 守护进程(也就是 Docker Engine)来操作 docker 容器;
- -v $(which docker):/usr/bin/docker :这个是将外部的docker 挂载到 jenkins 容器内部,以便其能使用 docker 命令;
- -v /opt/opt 是数据卷的挂载
- 浏览器访问jenkins
- http://192.168.0.97:8085
- 注意:不要使用http://192.168.0.97:8085/jenkins 这样访问输入密码后就会报错,这是个bug
- 获取密码的指令
- docker exec jenkins 'cat /var/jenkins_home/secrets/initialAdminPassword'
- 进入容器内部测试使用docker命令:
- [root@bogon ~]# docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 5d7efb64b114 jenkinsci/jenkins:v1 "/sbin/tini -- /us..." 49 seconds ago Up 49 seconds 50000/tcp, 0.0.0.0:8085->8080/tcp jenkins
- [root@bogon ~]#
- [root@bogon ~]# docker exec -it 5d7efb64b114 sh
- # docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 5d7efb64b114 jenkinsci/jenkins:v1 "/sbin/tini -- /us..." About a minute ago Up About a minute 50000/tcp, 0.0.0.0:8085->8080/tcp jenkins
- #
- 5、解决出现:^H^H^H^H
- 把stty erase ^H 添加到.bash_profile中
- vim /etc/profile
- stty erase ^H
- su root
- source /etc/profile
- 或者进入容器后直接切换为root即可解决
- 6、查看jdk版本
- docker exec jenkins 'java -version'
- 7、查看maven版本
- docker exec jenkins 'mvn -v'
- 8、添加git工具
- 进入jenkins界面的全局工具配置里面选择自动安装git工具
- 9、配置jenkins全局工具
- 添加jdk路径(进入容器里查看jdk家目录) 查看家目录参照: https://www.cnblogs.com/effortsing/p/10012211.html
- 这里通过mvn -v 查看得到的是: /usr/lib/jvm/java-8-openjdk-amd64/
- 添加maven路径(进入容器查看mvn家目录) 用 find / -name mvn 查找,查找结果: /usr/share/maven/bin/mvn 家目录就是/usr/share/maven
- 10、配置jenkins全局工具:添加settings.xml, 如下图所示:
- Maven Configuration -> Settings file in filesystem -> File Path /usr/share/maven/conf/settings.xml
- 11、安装Pipeline Maven Integration 插件
- 参照:
- https://www.cnblogs.com/fengjian2016/p/9970778.html
- https://segmentfault.com/q/1010000012232299
- https://huanqiang.wang/2018/03/30/Jenkins-Gitlab-Kubernetes-%E7%9A%84%E8%87%AA%E5%8A%A8%E5%8C%96%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90%E4%B8%8E%E9%83%A8%E7%BD%B2/
- linux出现:^H^H^H^H参照:
- https://blog.csdn.net/u013907239/article/details/74898123
容器版jenkins安装并且实现使用宿主机docker命令,采用的是docker outside deocker,带jdk、添加maven、git的更多相关文章
- 容器版Jenkins连接Kubernetes---------非容器版jenkins是无法安装kubenetes插件的,所以无法连接k8s
容器版Jenkins连接Kubernetes 特别注意:必须用谷歌浏览器,而且非容器版jenkins是无法安装kubernetes插件的,所以无法连接k8s 一.环境说明 OS系统版本:Ubuntu ...
- 【Devops】【docker】【CI/CD】关于jenkins构建成功后一步,执行的shell命令详解+jenkins容器运行宿主机shell命令的实现方法
1.展示这段shell命令 +详解 #================================================================================= ...
- 容器版Jenkins官方镜像 本身自带了 Java
docker版Jenkins官方镜像 本身自带了 Java
- 容器版jenkins使用宿主机的docker命令
参照里面的第一步里面的dockerfile: https://www.cnblogs.com/effortsing/p/10486960.html
- 容器版jenkins使用宿主机的kubectl命令
参照里面的第4步: https://www.cnblogs.com/effortsing/p/10486960.html
- 安装JDK+Eclipse+Maven+Git/Gitee(windows系统和linux系统)
1. 安装JDK 官网下载 下载java SE 下载 Java SE 7 1.1 windows配置jdk windows配置jdk 1.2 Ubuntu配置jdk Ubuntu 安装 JDK 7 / ...
- Jenkins(Docker容器内)使用宿主机的docker命令
1.Jenkins镜像 Docker容器内的Jenkins使用容器外宿主机的Docker(即DooD,还有另外的情况就是DioD),google一下有几种说法,但是都没试成功(试过一种就是修改宿主机/ ...
- 【Devops】【docker】【CI/CD】docker启动的Jenkins容器 - 系统管理 - 全局工具配置 - 自动安装JDK、Maven、Git、Docker
本篇适用于jenkins是启动的docker容器,自动安装JDK Maven Git Docker等全局工具 ========================================= ...
- Docker 安装mysql容器数据卷挂载到宿主机
环境 Centos:7 Docker: 17.05-ce Mysql: 5.7 1. Mysql外部数据和配置文件路径 msyql配置文件路径:/etc/mysql mysql数据卷路径:/var/l ...
随机推荐
- K Edit Distance
Description Given a set of strings which just has lower case letters and a target string, output all ...
- springmvc文件上传AND jwt身份验证
SpringMVC文件上传 思路:1.首先定义页面,定义多功能表单(enctype=“multipart/form-data”)2.在Controller里面定义一个方法,用参数(MultipartF ...
- Bootstrap是什么意思?
Bootstrap是一组用于网站和网络应用程序开发的开源前端(所谓“前端”,指的是展现给最终用户的界面.与之对应的“后端”是在服务器上面运行的代码)框架,包括HTML.CSS及JavaScript的框 ...
- 2017.10.6 国庆清北 D6T3 字符串
题目描述 如果把一个字符串从头到尾翻转后和原字符串相等,我们称之为回文串,比如“aabaa”.“())(”.“2017102”. 如果一个字符串存在两个出现过的字母出现的次数相等,我们称之为好 的字符 ...
- 38、数据源Parquet之使用编程方式加载数据
一.概述 Parquet是面向分析型业务的列式存储格式,由Twitter和Cloudera合作开发,2015年5月从Apache的孵化器里毕业成为Apache顶级项目,最新的版本是1.8.0. 列式存 ...
- Pyspark 最近使用的一些有趣姿势的梳理
之前对 SQL 还是不是非常熟悉的,但是现在或多或少还是会写一些计算任务.比如最近在推送将所有天级的耗时任务都从传统关系型数据库迁移至 Spark 集群当中进行计算,中间遇到一些有趣的小问题在这里记录 ...
- call 和 apply 方法
1:每个函数都包含两个非继承而来的方法:call(),apply(). 2:call方法和apply方法作用是一样的. 下边是call的使用例子: window.color = 'red'; docu ...
- 【转】Linux 利用 PROMPT_COMMAND 实现审计功能
linux历史命令记录在history,在用户退出的时候写入,不过有时候可以直接绕过去,不让写入,比如shutdown now,还有在一些情况下也是不予保存的,这让人很头疼 使用PROMPT_COMM ...
- JavaWeb之基础(2) —— HTTP协议
1. 粗讲什么是HTTP协议 HTTP协议的全程是Hyper Text Transfer Protocol,超文本传输协议,见名知意,这是个用来控制传输超文本的协议.下面就来简单说说什么是HTTP协议 ...
- 深度学习面试题26:GoogLeNet(Inception V2)
目录 第一层卷积换为分离卷积 一些层的卷积核的个数发生了变化 多个小卷积核代替大卷积核 一些最大值池化换为了平均值池化 完整代码 参考资料 第一层卷积换为分离卷积 net = slim.separab ...