Skip to content

Jenkins 参考文档

Jenkins 中文文档

使用 docker 安装 jenkins

shell
# 拉取镜像
docker pull jenkins/jenkins:2.376

# 查看镜像
docker images

docker image ls
# 创建挂载文件夹,并且进行文件权限授予
#创建文件夹
mkdir -p /home/jenkins_home

#权限
chmod 777 /home/jenkins_home

# 启动Jenkins
docker run -d -uroot -p 9526:8080 -p 50000:50000 --name jenkins --restart=always -v /home/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /var/run/docker.sock:/var/run/docker.sock -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker -v /etc/docker:/etc/docker jenkins/jenkins

# 如果刚开始忘记加是否自动重启,使用下面的命令作为补充
docker container update --restart=always 容器的名字

Jenkins 启动命令的具体说明如下

命令描述
-d后台运行容器,并返回容器 ID
-uroot使用 root 身份进入容器,推荐加上,避免容器内执行某些命令时报权限错误
-p 9524:8080将容器内 8080 端口映射至宿主机 9524 端口,这个是访问 jenkins 的端口
-p 50000:50000将容器内 50000 端口映射至宿主机 50000 端口
--name jenkins设置容器名称为 jenkins
-v /home/jenkins_home:/var/jenkins_home:/var/jenkins_home 目录为容器 jenkins 工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录
-v /etc/localtime:/etc/localtime让容器使用和服务器同样的时间设置
jenkins/jenkins镜像的名称,这里也可以写镜像 ID

使用 docker-compose 安装 Jenkins

1.在服务器内创建文件夹 jenkins,进入 jenkins 目录

2.创建 docker-compose.yaml,将下面的内容拷贝到 docker-compose.yaml 中

3.运行 docker-compose up -d,默认端口对外是 9526,也可以自定义修改

yaml
# 指定 docker-compose.yml 文件的写法格式
version: "3"
# 多个容器集合
services:
  docker_jenkins:
    # 为了避免一些权限问题 在这我使用了root
    user: root
    # 重启方式
    restart: always
    # 指定服务所使用的镜像 在这里我选择了 LTS (长期支持)
    image: jenkins/jenkins:2.376
    # 容器名称
    container_name: jenkins
    # 对外暴露的端口定义
    ports:
      - "9526:8080"
      - "50000:50000"
    # 卷挂载路径
    volumes:
      # 这是我们一开始创建的目录挂载到容器内的jenkins_home目录
      - /home/jenkins/jenkins_home/:/var/jenkins_home
      # 这是为了我们可以在容器内使用docker命令
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      # 同样的这是为了使用docker-compose命令
      - /usr/local/bin/docker-compose:/usr/local/bin/docker-compose

查看 Jenkins 的密码

# 进入到容器的内部
docker exec -it 容器的ID /bin/bash

# 查看密码
cat /var/jenkins_home/secrets/initialAdminPassword

# 查看指定容器的运行日志,在Jenkins初始化的时候,也可以通过此命令查看初始化密码,如下图所示
docker logs -f 容器的ID或者容器的名称

wecom-temp-d06ec330a519ba9b1321fc504366471e

Jenkins 的常见问题

插件源设置

因为网络原因,需要将插件源设置为国内的,这样才可以安装插件。

shell
# 进入宿主机目录 /home/jenkins_home/,
cd /home/jenkins_home/

# 编辑文件 hudson.model.UpdateCenter.xml
cat hudson.model.UpdateCenter.xml

# 将下面的url地址切换成清华大学官方镜像
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
# 重启容器
docker restart jenkins
xml
<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>https://updates.jenkins.io/update-center.json</url>
  </site>
</sites>

Jenkins 时间显示不正确的问题

进入到 jenkins 的用户设置,找到时区设置即可,设置为当前上海的时区。

shell
# 查看宿主机的时区
timedatectl

# 输出的内容摘录如下
Time zone: Asia/Shanghai (CST, +0800)

Jenkins 配置 https 访问

nginx
# 此处可以使用docker启动多个jenkins,但是数据盘挂载同一个的方式实现负载均衡
upstream jenkins {
  server 127.0.0.1:9524 fail_timeout=0;
}

server {
  listen 80;
  server_name jenkins.cghbh.com;
  # 如果请求的是http协议的地址,重定向到https
  return 301 https://$host$request_uri;
}

server {
  # 使用http2加快资源的请求速度
  listen 443 ssl http2;
  server_name jenkins.cghbh.com;

  ssl_certificate /root/jenkins.cghbh.com_nginx/jenkins.cghbh.com_bundle.crt;
  ssl_certificate_key /root/jenkins.cghbh.com_nginx/jenkins.cghbh.com.key;

  location / {
    proxy_set_header        Host $host:$server_port;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_redirect          http:// https://;
    proxy_pass              http://jenkins;
    # Required for new HTTP-based CLI
    proxy_http_version 1.1;
    proxy_request_buffering off;
    proxy_buffering off; # Required for HTTP-based CLI to work over SSL
    # workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
    add_header 'X-SSH-Endpoint' 'jenkins.cghbh.com:9524' always;
  }
}

Jenkins 触发 GitLab 的 webhook

当我们推送代码或者 merge request 操作的时候,可以触发 Jenkins 拉取代码并构建,实现持续构建的操作。

1.打开 Jenkins 项目的配置,选择构建触发器

2.点击高级选项,生产 GitLab 触发 Jenkins 的密钥

3.生成触发 Jenkins 的密钥

4.到 Jenkins 配置 webhooks

5.测试 GitLab 的 webhooks 到 Jenkins 的连通性,到此即已完成 GitLab+Jenkins 的自动化构建

6.前端自动化部署构建脚本的简单案例,本案例以 docker 为构建镜像

shell
#!/bin/bash
# 定义应用组名
group_name='main'
# 定义应用名称
app_name='main-web'
# 定义应用版本
app_version='1.0-SNAPSHOT'
echo '----停止消息服务 ----'
docker stop ${app_name}
echo '----删除实例----'
docker rm ${app_name}
echo '----删除旧镜像----'
docker rmi ${group_name}/${app_name}:${app_version}
echo '----打包镜像----'
# 打包编译docker镜像
docker build -t ${group_name}/${app_name}:${app_version} .
echo '----启动镜像----'
docker run -itd -p 9333:3000 --restart=always  --name ${app_name}  ${group_name}/${app_name}:${app_version}
echo '----启动完成----'