简介

Jenkins的部署其实很简单,因为Jenkins本身就是一个war包 使用Java -jar jenkins.war就可以很方便启动一个jenkins服务,但是这种部署方式很容易受到运行环境的干扰,jdk版本,服务器环境等,如果后续服务需要迁移、扩容会比较麻烦。

其实这种像jenkins这种无状态应用非常适合使用docker来部署,后续扩展迁移可以完全保证环境的一致性。

下面我们使用docker快速部署一个jenkins服务

🔗 Docker-Hub仓库

方法 / 步骤

一: 拉取镜像

# 使用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 页面

dockerfile 部署jmeter docker部署jenkins_运维


管理员的初始密码在 Jenkins 的工作目录下:/var/jenkins_home/secrets/initialAdminPassword,我们可以进容器内部去查看,也可以在我们挂载的目录下查看:

cat /usr/local/jenkins/secrets/initialAdminPassword

在下一个插件安装页面上,我们选择安装推荐的插件即可,下面是推荐的插件安装页面:

dockerfile 部署jmeter docker部署jenkins_docker_02


安装完成后,会进入管理员创建页面,可以选择使用admin账户继续,也可以创建一个新的管理员用户(建议创建新的管理员用户,方便管理账号密码):

dockerfile 部署jmeter docker部署jenkins_dockerfile 部署jmeter_03


完成之后就是欢迎界面了:

dockerfile 部署jmeter docker部署jenkins_jenkins_04

四: CI / CD 流程整合

dockerfile 部署jmeter docker部署jenkins_dockerfile 部署jmeter_05


第一次访问jenkins站点时会让你输入对应的密码进行配置,直接根据提示获取对应文件中的密码

4.1 新建项目

dockerfile 部署jmeter docker部署jenkins_运维_06


dockerfile 部署jmeter docker部署jenkins_jenkins_07

4.2 源码管理

dockerfile 部署jmeter docker部署jenkins_运维_08

4.3 触发器配置

dockerfile 部署jmeter docker部署jenkins_dockerfile 部署jmeter_09

  • 生成授权码

4.4: Gitlab 配置

dockerfile 部署jmeter docker部署jenkins_运维_10


dockerfile 部署jmeter docker部署jenkins_docker_11

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

dockerfile 部署jmeter docker部署jenkins_运维_12


-镜像构造与发布可选配置

dockerfile 部署jmeter docker部署jenkins_dockerfile 部署jmeter_13

  • 运行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 文件
  • dockerfile 部署jmeter docker部署jenkins_Jenkins_14

  • 至此整个流程完毕,可本地修改代码后提交到gitlab。gitlab钩子触发jenkin,jenkins 再从gitlab中拉取更新的代码,进行编译、构建、发布、运行