目录
前置环境
-
Docker(latest), 详情可见Docker入门与实践
-
Maven(3.6.3)
存放位置: /usr/local/maven -
JDK(8U201)
存放位置: /var/lib/docker/volumes/jenkins-data/_data/tools/hudson.model.JDK/JDK_8U201
PS: 示例中部分挂载到服务器上的地址, 需对应真实的地址
一、Jenkins安装
当前Jenkins示例版本为2.319.1
-
docker network create jenkins
-
docker volume create jenkins-docker-certs
-
docker volume create jenkins-data
-
docker pull docker:dind
docker container run --name jenkins-docker --restart=always --detach --privileged --network jenkins --network-alias docker --env DOCKER_TLS_CERTDIR=/certs --volume jenkins-docker-certs:/certs/client --volume jenkins-data:/var/jenkins_home --publish 2376:2376 docker:dind
-
docker pull jenkinsci/blueocean
docker container run --name jenkins-blueocean --restart=always --detach --network jenkins --env DOCKER_HOST=tcp://docker:2376 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 -v jenkins-data:/var/jenkins_home -v jenkins-docker-certs:/certs/client:ro -v /usr/local/maven/apache-maven-3.6.3:/usr/local/maven --publish 18099:8080 --publish 50000:50000 jenkinsci/blueocean
--rm: 容器停止后就会被删除
--restart=always: 容器停止后重新启动
二、Jenkins配置
-
浏览器打开:http://ip:port/
-
初次登陆密码查看
docker logs -f 容器ID(jenkinsci/blueocean)
-
插件安装
一般选择默认推荐安装, 可根据情况进行自定义安装
国内的清华源:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
官方的插件源:https://updates.jenkins.io/update-center.json官方的下载插件地址:https://updates.jenkins-ci.org/download/plugins/
-
设置管理员用户及密码
三、基本请求
1.重启Jenkins
http://ip:port/restart
2.重新加载配置文件
http://ip:port/reload
四、系统管理
1.系统配置
-
Folder -> Health Metrics -> 新增Child item with worst health(递归)
-
添加常用SSH Server -> 高级 ->Use Password authentication. or use a different key ->验证连接
如果没有, 需安装对应点的插件Publish Over SSH
-
凭据
添加凭据(全局) -> 用户名(项目仓库) -> 密码
2.全局配置
-
Maven 配置
默认 settings 提供 -> 文件系统中的settings文件 -> 文件路径
/usr/local/maven/conf/settings.xml默认全局 settings 提供 -> 文件系统中的全局settings文件 -> 文件路径
/usr/local/maven/conf/settings.xml -
JDK
可选择自动安装, 本示例为手动安装
前置环境中所指JDK放置目录(需放置在已经存在挂载目录中, 或启动容器时,直接挂载)
本例存放在已经挂载的目录中/tools/hudson.model.JDK
/var/jenkins_home/tools/hudson.model.JDK/JDK_8U201/jdk1.8.0_201 -
Maven
可选择自动安装, 本示例为手动安装
MAVEN_HOME配置为Jenkins容器启动时所挂载的目录/usr/local/maven
3.新建任务
以构建一个自由风格的软件项目为例:
-
确定项目名称
-
源码管理
Git -> Repository URL(项目地址) -> Credentials(可以访问项目的凭据) -> Branches to build(项目分支)
-
构建触发器
轮询SCM -> 日程表 -> 设置适合的周期(例如: H/5 * * * *)
-
构建环境
选择Delete workspace before build starts
-
构建
调用顶层Maven目标 -> Maven版本(Maven3.6.3) -> 目标(clean package -DskipTests -U)
通常存放公共信息的项目的目标——clean install package -Dmaven.test.skip=true, 无构建后操作
-
构建后操作
SSH Sever -> Name(自定义) -> Transfers
Transfers示例模板:
- Source Files——target/*.jar
- Remove prefix——target/
- Remote directory——目录名称(通常为项目名称)
- Exec command——模板
#!/bin/bash SERVER_NAME=项目名称 cp /home/dockerFiler/$SERVER_NAME /home/project/$SERVER_NAME cd /home/project/$SERVER_NAME #容器id CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}') #镜像id IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}') #清除旧容器 if [ -n "$CID" ]; then echo "存在$SERVER_NAME容器,CID=$CID" echo "停止旧容器" docker stop $SERVER_NAME echo "删除旧容器" docker rm $SERVER_NAME fi # 清除旧镜像 if [ -n "$IID" ]; then echo "存在$SERVER_NAME镜像,IID=$IID" echo "删除镜像" docker rmi $IID fi #构建镜像 echo "开始构建镜像" docker build -f ./$SERVER_NAME -t $SERVER_NAME . echo "构建镜像成功!" #运行容器 docker run -p 端口:端口 --name $SERVER_NAME -d $SERVER_NAME
-
应用/保存
4.构建项目
在视图中选中项目 -> 进入项目 -> 立即构建(若不手动触发, 也会自动触发)
五、删除Jenkins
-
删除版本容器
docker rm 容器ID(docker:dind)
docker rm 容器ID(jenkinsci/blueocean) -
删除版本镜像
docker rmi 镜像ID(docker:dind)
docker rmi 镜像ID(jenkinsci/blueocean) -
删除挂载文件目录(可不删, 后续可复用)
-
删除network
docker network rm ID
查看网络列表: docker network ls
PS: 如需重新安装, 只需重复步骤一即可(如若network以及相关文件夹未删除, 可跳过(将复用先前的配置信息))
六、其他问题
1.时区
可以直接尝试: docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/etc/localtime
-
进入容器(docker exec -it -u root 容器ID /bin/bash)(可能需要root权限-u root)
-
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
-
echo Asia/Shanghai >/etc/timezone
-
退出容器(exit/ctrl+p+q)
-
重启jenkins(http://localhost:port/restart)
2.项目构建
-
失败
-
项目地址错误
-
权限不足
-
分支
-
项目启动顺序(对其他项目有依赖性)
-
项目本身问题
-
-
不稳定
SSH Sever、Exec command存在问题
①.SSH Sever连接是否成功
②.指令是否正确空格分隔
③.cp文件目录是否有效
④.cd文件目录是否正确
⑤.缓存(尝试删除工程, 重新新建任务)
-
成功
Jenkins构建成功, 容器可能会自动退出
-
端口被占用
-
环境
dockerFile文件中项目启动参数:
-Dspring.profiles.active
(参考文档)-
环境不存在
-
当前环境的代码本身存在问题或未更新
-
-
缓存
尝试删除工程, 重新新建任务
-
3.部分功能未找到
-
jenkins版本
-
插件