jenkins
jenkins 是一个开源的持续集成工具,可以用来自动化构建、测试、部署项目 这里用docker-compose 部署jenkins,并把jenkins文件夹映射到外部,方便管理
docker 安装jenkins
# 获取镜像
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,创建文件夹
|-- demo
|-- compose //存放docker-compose.yml文件
|-- jenkins //jenkins文件夹
|-- jenkins_home //jenkins运行环境外部映射文件夹
2,创建docker-compose.yml文件
在compose文件夹下创建docker-compose.yml文件
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
docker-compose up -d
查看是否启动成功
docker ps -a
启动成功,并且端口8080已经和本地8080映射了
1,访问jenkins
浏览器打开
http://localhost:8080
2,解锁jenkins
进入jenkins后,会提示解锁jenkins,需要在docker容器中找到解锁密码
# 进入docker容器
docker exec -it docker_jenkins /bin/bash
# 找到解锁密码
cat /var/jenkins_home/secrets/initialAdminPassword
3,选择插件安装
选择自己需要的插件安装,也可以直接安装后面再安装
4,创建管理员账号
创建管理员账号
5,安装完成
安装完成,进入jenkins
6,安装插件
安装插件
- Localization: Chinese (Simplified) 中文语言包
- Publish Over SSH 通过ssh上传打包产物
- github plugin
- gitlab plugin
- gitee plugin
- nodejs plugin
- Maven Integration
7,配置nodejs
配置nodejs,主要是前端项目使用 打开系统管理 -> 全局工具配置 -> nodejs 按照如下配置
8,配置maven
TIP
主要是后端java项目使用
打开系统管理 -> 全局工具配置 -> Maven
如下配置
9,配置JDK
配置JDK
主要是后端java项目使用
打开系统管理 -> 全局工具配置 -> JDK
需要登录甲骨文账号,点击下图红色区域输入甲骨文账号密码
10,配置SSH服务器
服务器
配置服务器是为了自动化部署使用
打开系统管理 -> 系统管理 -> 系统配置 -> SSH Servers
注意配置时,点击高级,选择Use password authentication, or use a different key,并输入密码
配置完点击Test Configuration 如果出现Success 表示添加ssh服务器成功
按照下图配置
11,新建任务
新建任务
点击新建任务按钮
输入任务名称
选择构建一个maven项目
点击确定
12,配置git地址
TIP
进入项目 -> 设置 -> 源码管理
点击git,Repository URL栏输入项目git地址
Credentials选择一个用户名密码,没有的点击下方添加按钮添加
如果没有红色报错,表示添加git成功
指定分支写 */master 默认主分支
13,打包配置
打包配置
Root POM 输入pom.xml的地址
Goals and options 输入 打包命令 clean install
如下配置
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**
提示
- 如果有多个文件需要上传,可以点击下方 Add Transfer Set 按钮新增上传
15,构建
构建
- 返回项目目录,点击 立即构建 按钮
注意
注意
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>
修改阿里云镜像
<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
<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
:::