Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
Docker添加阿里云镜像加速器,以便于docker在pul拉取l镜像文件的时候速度快些。
[root@nginx-1 ~]# sudo mkdir -p /etc/docker
[root@nginx-1 ~]# vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://k9e55i4n.mirror.aliyuncs.com"]
}
[root@nginx-1 ~]# systemctl daemon-reload
[root@nginx-1 ~]# systemctl restart docker
#拉取Jenkins官方提供的集成blueocean插件的镜像
docker pull jenkinsci/blueocean
#运行容器
docker run -d --name jenkins -u root -p 14639:8080 -p 50000:50000 --privileged=true -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
参数说明:
-d:守护进程的方式启动容器,不打印正在运行的此容器的Docker日志。(或 -it:交互的方式启动容器,打印容器的启动日志信息,相当执行了一遍 docker logs -f jenkins )。
-p:将容器的8080端口映射到宿主机的8888端口。
-v:挂载目录(宿主机目录:容器目录);挂载后,修改宿主机的挂载目录将直接影响到容器的目录。
--name:容器的名称。
--privileged:使用该参数,container内的root拥有真正的root权限。
jenkinsci/blueocean:指定镜像名。
在浏览器上填入 http://<你的ip>:14639
14639端口号:宿主机映射容器8080的端口号(为了避免8080端口冲突)
成功:显示Jenkins的logo,等待一段时间即可。
#查看Jenkins的运行日志(ctrl+c:退出日志)
docker logs -f jenkins
失败:如果无法访问请检查系统防火墙或开端口。
#CentOS7关防火墙
systemctl stop firewalld
#开放端口
firewall-cmd --zone=public --add-port=14639/tcp --permanent
firewall-cmd --reload
#进入容器
docker exec -it jenkins /bin/bash
#查看初始密码
cat /var/jenkins_home/secrets/initialAdminPassword
复制输出的内容,粘贴到Administrator password。此时进行下一步你会看到此界面,点击 Install suggested plugins
等待安装完毕:
漫长的等待之后到了下一步,创建admin用户:
到这里,整个初始化Jenkins结束了,接下来是配置环境了……
我们需要下载一个maven,然后配置自己公司setting.xml,比如私服地址。前面我们没有退出容器(也就是执行exit命令),如果退出了容器的朋友,可以执行如下命令进入容器,最后的时候我将对docker命令进行总结。
#进入容器
docker exec -it jenkins /bin/bash
#进入安装位置
cd /usr/local
#下载maven安装包
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
#解压压缩包
tar -zxvf apache-maven-3.3.9-bin.tar.gz
#删除压缩包
rm apache-maven-3.3.9-bin.tar.gz
#配置maven环境变量
vi /etc/profile
在文件的最下面添加:
#set Maven environment
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
#生效profile文件
source /etc/profile
#检查maven是否配置成功(显示maven home、java home等信息则配置成功)
mvn -v
需要替换容器的setting文件,前提是setting文件已经配置好自己公司的私服地址。
从本机配置好setting文件,再将该文件传输到宿主机(也就是虚拟机)中
#在宿主机中安装lrzsz依赖,lrzsz是上传下载的
yum install lrzsz
#上传文件,rz就是上传;sz就是下载,上传setting文件
rz
#默认当前位置是上传目录,可以查看当前目录
pwd
#通过dokcer命令将setting文件上传到Jenkins容器中
docker cp [上传目录]/setting.xml jenkins:/usr/local/apache-maven-3.3.9/conf
至此,maven环境配置完成,然后进入管理Jenkins页面……
到管理页面……
点击Manage Plugins,安装maven插件……
安装成功后,点击Global Tool Configuration,进行全局配置……
最后,点击 应用 并 保存!
点击 新建Item ,出现如下页面……
进入Item,配置你的任务……
#!/bin/bash
result=$(docker ps| grep "dec-netty")
if [[ "$result" != "" ]]
then
echo "================docker stop dec-netty================"
docker stop dec-netty
fi
result1=$(docker ps -a | grep "dec-netty")
if [[ "$result1" != "" ]]
then
echo "================docker rm dec-netty================"
docker rm dec-netty
fi
result2=$(docker images | grep "dec-netty:0.0.1")
if [[ "$result2" != "" ]]
then
echo "================docker rmi dec-netty:0.0.1================"
docker rmi dec-netty:0.0.1
fi
#maven命令(通过DockerFile将项目构建成docker镜像)
clean package docker:build
项目中的pom文件的大致内容:
<?xml version="1.0" encoding="UTF-8"?>
://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
>4.0.0 >
>
>com.deceen >
>netty-parent >
>2.0.8.RELEASE >
<!-- lookup parent from repository -->
>
>dec-netty >
>0.0.1 >
>dec-netty >
>jar >
>Netty即时通讯 >
>
<!-- web -->
org.springframework.boot
spring-boot-starter-web
<!-- Netty -->
io.netty
netty-all
4.1.31.Final
<!-- fastjson -->
com.alibaba
fastjson
1.2.59
<!-- lang3 -->
org.apache.commons
commons-lang3
>
>
>app >
>
>
>org.springframework.boot >
>spring-boot-maven-plugin >
<!--这块一定要配置否则打jar的时候会说找不到主类-->
true
com.DecNettyApplication
repackage
>
<!-- Docker maven plugin -->
com.spotify
docker-maven-plugin
1.0.0
${project.artifactId}:${project.version}
src/main/docker
/
${project.build.directory}
${project.build.finalName}.jar
http://61.185.75.**:1689
org.apache.maven.plugins
maven-compiler-plugin
8
>
>
>
1、pom文件中的 dckerHost 怎么填写?
答:在宿主机中进行配置。#修改docker配置,允许远程访问 vi /lib/systemd/system/docker.service 其中ExecStart=后,斜杠(\)前,添加配置: -H tcp://0.0.0.0:1689-H unix:///var/run/docker.sock #修改后刷新配置,重启服务 systemctl daemon-reload systemctl restart docker
2、pom文件中的dockerDirectory目录下有什么内容?
答:docker的Dockerfile文件,通过Dockerfile将maven项目构建成docker镜像,文件名字是固定的,Dockerfile不能修改。
Dockerfile内容如下:FROM java:8 MAINTAINER luzc COPY app.jar / ENTRYPOINT ["java","-jar","app.jar"]
博主也不这么懂Dockerfile语法,有兴趣的朋友可以研究一下……
3、构建任务时,日志报错[FATAL] Non-resolvable parent POM for com.deceen:dec-netty:0.0.1: Could not find artifact com.deceen:netty-parent:pom:2.0.8.RELEASE in bintray (http://dl.bintray.com/andimarek/graphql-java) and ‘parent.relativePath’ points at no local POM @ line 5, column 13
答:将pom文件中的parent节点中的relativePath注释掉即可。
#运行容器
docker run -d --name dec-netty -p 12025:8080 dec-netty:0.0.1
echo '================ 运行容器日志信息 ================'
#打印容器的运行日志
docker logs -f dec-netty
最后,点击 应用 并 保存!
点击第2步的构建列队中的任务,查看任务的日志信息……
显示Finished: SUCCESS,则说明Jenkins自动构建成功!!!
前面都是通过Jenkins手动进行项目部署,Jenkins强大的原因是自动帮你持续部署项目,当项目push到git上时,Jenkins就会去git上拉取代码进行构建。下面我将介绍git两种方法进行自动构建。
这里的Gitblit的版本是1.8.0,所以配置Jenkins地址有所不同。
Gitblit的Jenkins groovy插件会调用Jenkins的钩子来按需建立这种方式。
GitLab中使用webhook向jenkins通知,当有代码push后将通知jenkins进行构建。
#查看某个镜像版本信息
docker search 镜像
#拉取镜像
docker pull 镜像
#列出已有镜像
docker images
#导出镜像
docker save REPOSITORY:TAG/镜像ID > /镜像路径/镜像.tar.gz
举例:docker save centos7:latest > /root/centos7.tar.gz
#导入镜像
docker load < /镜像路径/镜像.tar.gz
举例:docker load < /root/centos7.tar.gz
#移除镜像
docker rmi REPOSITORY:TAG/镜像ID
#运行容器方法一(守护进程)
docker run -d --name 容器取名 -p 宿主机端口:容器端口 --privileged=true REPOSITORY:TAG/镜像ID
#运行容器方法二(交互)
docker run -it --name 容器取名 -p 宿主机端口:容器端口 --privileged=true REPOSITORY:TAG/镜像ID /bin/bash
#查看容器正在启动情况
docker ps
#查看容器所有启动情况
docker ps -a
#进入容器
docker exec -it 容器名 /bin/bash
#退出容器
exit
#复制文件到容器中
docker cp /文件路径/文件 容器名:/存储路径
举例:docker cp /usr/local/setting.xml jenkins:/usr/local/apache-maven-3.3.9/conf
#启动容器
docker start 容器名/容器ID
#暂停容器
docker stop 容器名/容器ID
#移除容器
docker rm 容器名/容器ID
#一键启动、移除、暂停所有容器
docker start `docker ps -qa`
docker rm `docker ps -qa`
docker stop `docker ps -qa`
#查看运行容器的详细信息(-A:后面指定显示行数)
docker inspect 容器名 |grep Mounts -A 20
#dokcer开机自启某个容器
docker update --restart=always 容器名
#前提Docker服务开机自启
sudo systemctl enable docker.service
#创建文件
mkdir 文件名
#复制粘切文件
mv 原文件目录 目标文件目标
#删除文件
rm 删除文件目录
#删除文件夹
rm -rf 删除文件夹目录
#查看防火墙状态
systemctl status firewalld
#暂停防火墙状态
systemctl stop firewalld
#启动防火墙状态
systemctl start firewalld
#永久关闭防火墙(关机重启才会生效)
systemctl disable firewalld
#开放端口号
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
firewall-cmd --reload
#移除端口号
firewall-cmd --zone=public --remove-port=端口号/tcp --permanen
#查看所有开放端口列表
firewall-cmd --zone=public --list-ports
#查看某应用进程
ps -ef | grep 应用名
#查看某端口
netstat -lnp|grep 端口名
#查找所有yum包
yum list all
#根据关键字查询
yum list all|grep 关键字
#安装基本依赖,wget 网页下载 lrzsz上传下载 bash-completion tab补全 vim 编辑器
yum install wget lrzsz bash-completion vim -y
#设置服务开机启动
chkconfig 服务名 on
#查找文件 /:从根目录开始找
find / -name 文件名
#安装zip解压
yum install unzip -y
#解压zip包
unzip 包名.zip
#查看内存占用情况
free -g
#查看硬盘内存
df -h