Skip to content

jenkins

jenkins 是一个开源的持续集成工具,可以用来自动化构建、测试、部署项目 这里用docker-compose 部署jenkins,并把jenkins文件夹映射到外部,方便管理

docker 安装jenkins

bash
# 获取镜像
docker pull jenkins/jenkins:lts
# 运行
docker run -d -p 8080:8080 -p 50000:50000 -v /root/mydocker/jenkins:/var/jenkins_home --name myjenkins -u root --privileged=true --restart=always jenkins/jenkins:lts

docker-compose安装jenkins

1,创建文件夹

bash
|-- demo
    |-- compose //存放docker-compose.yml文件
    |-- jenkins //jenkins文件夹
        |-- jenkins_home //jenkins运行环境外部映射文件夹

2,创建docker-compose.yml文件

在compose文件夹下创建docker-compose.yml文件

shell
version: '3'
services:
  docker_jenkins:
    user: root # 使用root用户运行docker
    restart: always # 重启时重新启动
    image: jenkins/jenkins:lts # 镜像
    container_name: docker_jenkins # 容器名称
    ports:
      - "8080:8080" # 容器端口映射到主机端口
      - "50000:50000" # 容器端口映射到主机端口
    volumes:
      - /demo/jenkins/jenkins_home:/var/jenkins_home  # 把jenkins_home映射到本地

图片

3,运行docker-compose.yml文件,启动jenkins

shell
docker-compose up -d

图片

查看是否启动成功

shell
docker ps -a

img

启动成功,并且端口8080已经和本地8080映射了

1,访问jenkins

浏览器打开 http://localhost:8080

img

2,解锁jenkins

进入jenkins后,会提示解锁jenkins,需要在docker容器中找到解锁密码

shell
# 进入docker容器
docker exec -it docker_jenkins /bin/bash
# 找到解锁密码
cat /var/jenkins_home/secrets/initialAdminPassword

3,选择插件安装

选择自己需要的插件安装,也可以直接安装后面再安装

img

4,创建管理员账号

创建管理员账号

img

5,安装完成

安装完成,进入jenkins

img

6,安装插件

安装插件

  • Localization: Chinese (Simplified) 中文语言包
  • Publish Over SSH 通过ssh上传打包产物
  • github plugin
  • gitlab plugin
  • gitee plugin
  • nodejs plugin
  • Maven Integration

7,配置nodejs

配置nodejs,主要是前端项目使用 打开系统管理 -> 全局工具配置 -> nodejs 按照如下配置

img

8,配置maven

TIP

  • 主要是后端java项目使用

  • 打开系统管理 -> 全局工具配置 -> Maven

  • 如下配置

img

9,配置JDK

配置JDK

  • 主要是后端java项目使用

  • 打开系统管理 -> 全局工具配置 -> JDK

  • 需要登录甲骨文账号,点击下图红色区域输入甲骨文账号密码

i

i

10,配置SSH服务器

服务器

  • 配置服务器是为了自动化部署使用

  • 打开系统管理 -> 系统管理 -> 系统配置 -> SSH Servers

  • 注意配置时,点击高级,选择Use password authentication, or use a different key,并输入密码

  • 配置完点击Test Configuration 如果出现Success 表示添加ssh服务器成功

  • 按照下图配置

i

11,新建任务

新建任务

  • 点击新建任务按钮

  • 输入任务名称

  • 选择构建一个maven项目

  • 点击确定

i

12,配置git地址

TIP

  • 进入项目 -> 设置 -> 源码管理

  • 点击git,Repository URL栏输入项目git地址

  • Credentials选择一个用户名密码,没有的点击下方添加按钮添加

  • 如果没有红色报错,表示添加git成功

  • 指定分支写 */master 默认主分支

i

13,打包配置

打包配置

  • Root POM 输入pom.xml的地址

  • Goals and options 输入 打包命令 clean install

  • 如下配置

i

14,配置SSH上传

SSH上传

  • 点击 增加构建后操作步骤 按钮

  • 选择 Send build artifacts over SSH 选项

  • 在SSH-SERVER中选择要上传的服务器

  • 在Source files中输入打包的产物的径

  • 在Remove prefix 输入产物前路径,不然会连着文件夹一起传输

  • 在 Remote directory 输入 服务器当前用户目录下面的某一个文件夹

  • 例如上传到 /root/jobs 用户文件夹根目录是 /root 那就此处填写 jobs**

  • 在 Exec command 输入上传完成后需要执行的命令,一般是执行命令

  • 如果填写了Remote directory,那就要先进入这个文件夹,例如 # cd jobs**

i

提示

  • 如果有多个文件需要上传,可以点击下方 Add Transfer Set 按钮新增上传

15,构建

构建

  • 返回项目目录,点击 立即构建 按钮

i

注意

注意

  • 1, 配置完Maven和JDK以后,jenkins并不会在配置完就安装,而是在第一次运行任务的时候自动安装

  • 2,docker-compose是定义和编排docker镜像的工具,通过使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务

  • 3,第一次运行任务会需要较长时间用来下载依赖和安装Maven,JDK,第二次以后就会快很多

自定义Maven路径

路径

  • 系统管理 -> 系统设置 -> Local Maven Repository 选择 Default ("~/.m2/repository", or the value of 'localRepository' in Maven's settings file, if defined)

  • 如果想修改maven配置文件可以在 /var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/3.8.6/conf 路径下找到setting.xml

  • 修改本地仓库路径: <localRepository>/root/mvnrep</localRepository>

  • 修改阿里云镜像

xml
<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>*</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

自定义jdk

jdk

  • 1,下载jdk解压复制到镜像jenkins内部

  • 2,配置jenkins 系统管理 -> 全局工具配置 -> jdk 把自动安装去掉,JAVA_HOME填写自己的jdk路径

  • 3,保存

java.net.UnknownHostException: updates.jenkins.io

联网错误

  • 如果出现:WARNING hudson.model.UpdateCenter#updateDefaultSite: Upgrading Jenkins. Failed to update the default Update Site 'default'. Plugin upgrades may fail. java.net.UnknownHostException: updates.jenkins.io

可能是jenkins没有联网,有两个方法

1,打开 localhost:8080/pluginManager/advanced 修改 update Site URL 为 http://updates.jenkins.io/update-center.json

2,进入jenkins服务器,修改/etc/resolv.conf 文件,添加 nameserver nameserver 8.8.8.8 nameserver 114.114.114.114

No valid crumb was included in request

新版本Jenkins的CSRF安全校验的问题

  • 出现No valid crumb was included in request for /pluginManager/installPlugins by admin. Returning 403.

  • 进入/jenkins_home/

  • 编辑config.xml

xml
<crumbIssuer class="hudson.security.csrf.DefaultCrumbIssuer">
    <excludeClientIPFromCrumb>true</excludeClientIPFromCrumb>
  </crumbIssuer>

553 mail from must equal authorized user

测试邮件出现553 mail from must equal authorized user

  • 出现553 mail from must equal authorized user

  • 在 系统管理(Manage Jenkins)的"系统设置(Configure system)"中"Jenkins Location"添加系统管理员邮件地址(System Admin e-mail address)

  • System Admin e-mail address要和邮件服务器的用户名一致

Maven JVM terminated unexpectedly with exit code 137

Maven JVM terminated unexpectedly with exit code 137

  • 有可能是服务器内存不足

  • docker update jenkins -m 3g --memory-swap -1

  • 重启服务

jenkins ssh连接超时 SSH: Disconnecting configuration

:::SSH: Disconnecting configuration

  • 可能是权限问题,例如执行脚本没有给权限

  • chmod 777 myshell.sh

  • 重启服务

:::

jenkins java.io.EOFException: unexpected stream termination

::: java.io.EOFException: unexpected stream termination

  • 可能是jdk问题

  • 重新启动再次打包即可

  • 重启服务

:::

jenkins 推送自动打包功能报500问题

::: 推送自动打包功能报500

  • 配置完成后需要重启jenkins

  • 重启jenins服务后可用

:::

jenkins 打包后日志乱码问题

::: 打包后日志乱码问题

  • 运行脚本增加 export LANG=zh_CN.UTF-8; nohup java -Dfile.encoding=UTF-8

:::

杨利伟的博客