简介
Jenkins的部署其实很简单,因为Jenkins本身就是一个war包 使用Java -jar jenkins.war就可以很方便启动一个jenkins服务,但是这种部署方式很容易受到运行环境的干扰,jdk版本,服务器环境等,如果后续服务需要迁移、扩容会比较麻烦。
其实这种像jenkins这种无状态应用非常适合使用docker来部署,后续扩展迁移可以完全保证环境的一致性。
下面我们使用docker快速部署一个jenkins服务
方法 / 步骤
一: 拉取镜像
# 使用jdk8 的lts版本
docker pull jenkins/jenkins:2.346.3-lts-jdk8
# 创建挂载文件夹
mkdir -p /docker/jenkins18080
# 创建挂载目录的同时要给该目录配置权限 777,如果权限不足的话,
# 到时进行目录挂载的时候会失败导致无法启动 Jenkins 容器。
chmod 777 /docker/jenkins18080
二: 安装
docker run -d \
-p 18080:8080 \
-p 50000:50000 \
--name=jenkins18080 \
-v /docker/jenkins18080:/var/jenkins_home \
-v /docker/jenkins18080/localtime:/etc/localtime \
--restart=always \
jenkins/jenkins
- 参数解析:
-d:后台运行容器;
-p 8888:8080:将容器的 8080 端口映射到服务器的 8888 端口;
-p 50000:50000:将容器的 50000 端口映射到服务器的 50000 端口;
-v /usr/local/jenkins:/var/jenkins_home:将容器中 Jenkins 的工作目录挂载到服务器的 /usr/local/jenkins;
-v /etc/localtime:/etc/localtime:让容器使用和服务器同样的时间设置;
–restart=always:设置容器的重启策略为 Docker 重启时自动重启;
–name=jenkins:给容器起别名;
2.1 查看是否在运行:
docker ps -l
------------
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9bbc86aa0358 jenkins/jenkins "/sbin/tini -- /usr/…" 4 hours ago Up 4 hours 0.0.0.0:8888->8080/tcp, 0.0.0.0:50000->50000/tcp jenkins
查看启动日志:
docker logs jenkins18080
-------------------
Running from: /usr/share/jenkins/jenkins.war
webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
2022-03-16 03:49:09.190+0000 [id=1] [INFO] org.eclipse.jetty.util.log.Log
如果没有启动成功的话,可以排查一下挂载的目录是否正确,比如是否配了目录权限等。
三: 访问和初始化 Jenkins
在访问 Jenkins 页面前,我们需要对 Jenkins 的插件配置内容修改成内容的镜像加速 配置好后,访问 Jenkins 页面
管理员的初始密码在 Jenkins 的工作目录下:/var/jenkins_home/secrets/initialAdminPassword,我们可以进容器内部去查看,也可以在我们挂载的目录下查看:
cat /usr/local/jenkins/secrets/initialAdminPassword
在下一个插件安装页面上,我们选择安装推荐的插件即可,下面是推荐的插件安装页面:
安装完成后,会进入管理员创建页面,可以选择使用admin账户继续,也可以创建一个新的管理员用户(建议创建新的管理员用户,方便管理账号密码):
完成之后就是欢迎界面了:
四: CI / CD 流程整合
第一次访问jenkins站点时会让你输入对应的密码进行配置,直接根据提示获取对应文件中的密码
4.1 新建项目
4.2 源码管理
4.3 触发器配置
- 生成授权码
4.4: Gitlab 配置
4.5: Docker构建
在项目根目录编写Dockerfile 文件用于配合docker build and publish 进行构建docker 镜像 内容如下
FROM java:8 #环境依赖
MAINTAINER hello <hello.dp@qq.com> #作者信息
VOLUME /tmp
ADD target/dev-ops-0.0.1-SNAPSHOT.jar /dev-ops-0.0.1-SNAPSHOT.jar #增加文件
ENTRYPOINT ["java","-Xmx200m","-Xms200m","-jar","/dev-ops-0.0.1-SNAPSHOT.jar"] #运行命令
EXPOSE 8081 #暴漏端口
- 镜像构造与发布 这里指定生成镜像的name 与tag
-镜像构造与发布可选配置
- 运行docker-compose.yml 文件运行镜像到容器
version: '3'
services:
hello-ci-cd:
restart: always
image: hello-maven-docke:v1 #指定镜像id 与tag
container_name: hello-ci-cd #指定容器名称
ports:
- '8081:8081' #端口映射
- 指定dockers-compose.yml 文件
- 至此整个流程完毕,可本地修改代码后提交到gitlab。gitlab钩子触发jenkin,jenkins 再从gitlab中拉取更新的代码,进行编译、构建、发布、运行