本文主要记录如何通过docker安装jenkins,并且通过jenkins部署项目,最终效果是只要在jenkins对某个项目点击构建,jenkins就会去gitLab上拉取最新项目的最新代码,然后根据你自己项目的pom.xml文件,把项目打包成jar,并且自动把这个最新的jar运行起来,达到一键式构建的目标。
docker pull jenkins/jenkins:2.344 #拉取jenkins镜像
#把git的所有东西全部映射
docker run -u root -d -p 10240:8080 \
-p 10241:50000 \
-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/jenkins_mount:/var/jenkins_home \
-v /usr/local/maven/apache-maven-3.8.5:/usr/local/maven/apache-maven-3.8.5 \
-v /usr/local/git/:/usr/local/git/ \
-v /etc/localtime:/etc/localtime \
-e TZ=Asia/Shanghai \
--name myjenkin #镜像id
让docker
容器可以使用git
与maven
的命令,需要在Jenkins
启动时添加git
与maven
的数据卷映射
-v /usr/local/maven/apache-maven-3.8.5:/usr/local/maven/apache-maven-3.8.5
-v /usr/local/git:/usr/local/git #把git的所有东西全部映射
容器内部需要使用宿主机的docker
需要将宿主机中docker
命令做数据卷映射
-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
git做内容卷映射的时候需要把git的全部东西都映射过去不然会报错
jenkins容器启动以后,咱们就需要将端口为10240打开,具体怎么打开10240端口
本人是直接添加的白名单
firewall-cmd --list-ports
firewall-cmd --zone=public --add-port=10241/tcp --permanent
首先映入眼帘的是这个,jenkins需要你输入初始密码,你就到上面图片的提示的路径下把初始密码拷贝过来:/var/jenkins_home/secrets/initialAdminPassword。
如果出现Jenkins无法访问的情况,可以 执行docker logs -f myjenkins时报错,一般是权限不够导致内容卷映射出现问题:
touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied Can not write to/var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
需要修改下目录权限, 因为当映射本地数据卷时,/var/jenkins_home目录的拥有者为root用户,而容器中jenkins user的uid为1000 执行如下命令即可:
chown -R 1000:1000 /var/jenkins_home
docker run -dt-p 10240:8080 -p 10241:50000 --privileged=true -v
#--privileged=true让容器具有root权限,便于进入容器
#如果执行命令之后还是无法启动的话直接 docker run -u root 指定操作用户
#因为Jenkins启动时候的默认用户不是root权限不够
Maven Integration
Publish Over SSH
(如果不需要远程推送,不用安装)Gitee
码云,安装插件Gitee
(Git自带不用安装)如果看不懂英文,那么同学们还可以再安装一个中文插件:输入chinese就可以看到,新版本Jenkins自带中文插件,将Jenkins重启几遍就好了。
配置的时候需要注意/usr/local/git/
这个地址是git的安装目录,/bin/git
这个是执行git命令的程序,我们需要执行git命令就需要找到他。
方法一:密码验证
方法二:秘钥方式
先阅读centos生成ssh_kyes拿到公钥私钥,然后将生成的id_rsa文件下的私钥放进去
填写名称、主机ip、ssh用户名、远程的目录(最好写/,后面就可以用绝对路径了)
点击【Test Configuration】,测试连接,显示Success即可;
然后依次点击: Git - > Add Repository -> 添加(jenkins凭据)
配置好这些之后我们就能自动获取远程仓库的代码了
选择: Bulid -> 如下的指令:使用maven进行自动打包
clean install -Dmaven.test.skip=true
点击构建之后会有一条执行记录点开执行记录查看控制台输出可以找到,maven的打包目录最后出现succes就代表着打包成功就可以接下来的处理了
由于我这里Jenkins
与项目需要部署在同一个宿主机,所以采用的是dockerfile
的方式对项目进行部署,这里需要执行宿主机的docker
命令,所以启动Jenkins
的时候需要做数据卷映射,不然容器不能使用docker
命令,不指定数据卷的话需要在容器中安装docker
#Jenkins启动时加上
-v /run/docker.sock:/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
进入到项目/var/jenkins_mount/workspace/项目目录,创建Dockerfile文件
vim Dockerfile
文件内容为
FROM lifeng/jdk:11
MAINTAINER dengjiawne <[email protected]>
RUN yum install dejavu-sans-fonts fontconfig -y
# 宿主机文件挂载目录
VOLUME /opt/java_app_docker/img/video
# 宿主机文件挂载目录
VOLUME /opt/java_app_docker/img/mp4
# 宿主机文件挂载目录
VOLUME /opt/java_app_docker/img/picture
# 宿主机文件挂载目录
VOLUME /opt/java_app_docker/img/gif
VOLUME /opt/java_app_docker/ffmpeg-5.1.1-amd64-static/ffmpeg
# 指定路径
WORKDIR /opt/java_app_docker/app
ADD target/video-de-duplication-0.0.1-SNAPSHOT.jar video.jar
EXPOSE 8083
ENTRYPOINT ["java","-jar","video.jar"]
看不懂的可以去看看Dockerfile命令详解
编写完之后:【首页】->【项目名称】->【配置】
在这里面添加执行指令
#!/bin/bash
cd /var/jenkins_home/workspace/video
docker stop video || true #停止容器
docker rm video || true #删除容器
docker rmi video || true #删除镜像
docker build -t video . #编译Dockerfile生成新的进行
docker run -d -p 8083:8083 \ #端口号映射
#内容卷映射
-v /opt/java_app_docker/img/video:/opt/java_app_docker/img/video \
-v /opt/java_app_docker/img/mp4:/opt/java_app_docker/img/mp4 \
-v /opt/java_app_docker/img/picture:/opt/java_app_docker/img/picture \
-v /opt/java_app_docker/img/gif:/opt/java_app_docker/img/gif \
-v /opt/java_app_docker/img/video:/opt/java_app_docker/img/video \
-v /opt/java_app_docker/ffmpeg-5.1.1-amd64-static/ffmpeg:/opt/java_app_docker/ffmpeg-5.1.1-amd64-static/ffmpeg \
-e TZ=Asia/Shanghai \ #设置时区
--name video video:latest
#--name 指定容器名称
# video:latest指定使用的镜像