Jenkins安装
Jenkins是一个开源软件项目,基于Java开发的一种持续集成工具。它的主要功能是监控持续重复的工作,并提供一个开放易用的软件平台,使软件的持续集成变得可能。本文将介绍如何安装Jenkins以及一些前期检查工作。
## 前期Jenkins检查工作
注意:本文章于2019年末发布,与现在Jenkins版本有所不同!仅参考思路。
根据自己的Java项目环境选择对应的Jenkins版本。本文以Java 8为例,目前最新latest的Jenkins已不支持Java 8,最低需支持Java 11(Java 11 支持 Java 8 的 API)。而Java 11上运行Jenkins,其支持将于2024年9月30日或之后结束。有关更多详细信息,请参阅Jenkins官方文档。因此,建议大家直接安装Java 17版本的Jenkins,避免不必要的麻烦。旧版本Jenkins可参考DockerHub官网查看对应的Tags。
## 镜像加速器
为了提高Docker在拉取镜像文件、安装Jenkins插件库时的速度,可以添加阿里云镜像加速器。操作步骤如下:
1. 搜索阿里云官网:`https://www.aliyun.com/`
2. 登录账号后搜索“容器镜像服务 ACR”
3. 在镜像工具中即可看到镜像加速器
## 创建docker文件夹
```bash
[root@nginx-1 ~]# sudo mkdir -p /etc/docker
```
## 编辑daemon.json文件
```bash
[root@nginx-1 ~]# vi /etc/docker/daemon.json
```
设置加速器地址:
```json
{
"registry-mirrors": [
"https://k9e55i4n.mirror.aliyuncs.com"
]
}
```
保存并退出vi编辑器。
## 重新加载和重启docker
```bash
[root@nginx-1 ~]# systemctl daemon-reload
[root@nginx-1 ~]# systemctl restart docker
```
拉取Jenkins官方提供的集成blueocean插件的镜像
```docker
docker pull jenkinsci/blueocean
```
# 运行容器
```docker
docker run -d --name jenkins -u root -p 14639:8080 -p 50000:50000 --privileged=true -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
```
参数说明:
- `-d`:以守护进程的方式启动容器,不打印正在运行的此容器的Docker日志。或者使用 `-it` 以交互的方式启动容器,打印容器的启动日志信息,相当于执行了一遍 `docker logs -f jenkins`。
- `-p`:将容器的8080端口映射到宿主机的8888端口。
- `-v`:挂载目录(宿主机目录:容器目录);挂载后,修改宿主机的挂载目录将直接影响到容器的目录。
- `--name`:指定容器的名称。
- `--privileged`:使用该参数,container内的root拥有真正的root权限。
- `jenkinsci/blueocean`:指定镜像名。
Jenkins 安装与使用
## 版本:3
### 服务
- **Jenkins**:
- 镜像名称:`jenkinsci/blueocean`
- 容器名:`jenkins`
- 是否使用特权:`true`(使用该参数,容器内的 root 拥有真正的 root 权限)
- 重启策略:`always`(在容器退出时总是重启容器)
- 用户:`root`(指定用户)
- 网络模式:`host`(默认 bridge)
- 端口映射:将容器的端口映射到宿主机上(“:”前数字为宿主机端口,“:”后数字为容器端口)
- `- "14639:8080"`(自定义宿主机端口 8080)
- `- "50000:50000"`
- 环境变量:
- `TZ: Asia/Shanghai`(指定容器运行所属时区)
- 卷:
- `/etc/localtime:/etc/localtime`
- `./jenkins_home:/var/jenkins_home`
- `/var/run/docker.sock:/var/run/docker.sock`(Docker 守护进程(Docker daemon)默认监听的 Unix 域套接字(Unix domain socket),容器中的进程可以通过它与 Docker 守护进程进行通信。简单来说,容器使用宿主机 docker 命令访问 Jenkins)
## 访问 Jenkins
1. 在浏览器上填入地址:`http://<你的ip>:14639`(14639 端口号:宿主机映射容器 8080 的端口号,为了避免 8080 端口冲突)
2. 成功:显示 Jenkins 的 logo,等待一段时间即可。
3. **查看 Jenkins 的运行日志**,日志中含有管理员初始密码(ctrl+c:退出日志)。命令:`docker logs -f --tail=500 jenkins`。
4. 失败:如果无法访问请检查系统防火墙或开放端口。
以下是重构后的内容:
## CentOS7关防火墙
```bash
systemctl stop firewalld
# 开放端口
firewall-cmd --zone=public --add-port=14639/tcp --permanent
firewall-cmd --reload
```
## 手动配置Jenkins
1. Jenkins初始化
2. 出现如下页面,需要我们手动获取Admin初始密码。
```bash
# 进入容器
docker exec -it jenkins /bin/bash
# 查看初始密码
cat /var/jenkins_home/secrets/initialAdminPassword
```
复制输出的内容,粘贴到Administrator password。此时进行下一步你会看到此界面,点击 Install suggested plugins(安装推荐插件)。等待安装完毕(如果插件安装失败,可能没配置镜像加速器的原因,走国内仓库下载插件!):漫长的等待之后到了下一步,创建admin用户。到这里,整个初始化Jenkins结束了,接下来是配置环境了......
## 手动配置maven环境(可选)
我们需要下载一个maven,然后配置自己公司setting.xml,比如私服地址。最后的时候我将对docker命令进行总结。
以下是重构后的内容:
## Jenkins容器中的Maven环境配置
### 1. 进入容器
```bash
docker exec -it jenkins /bin/bash
```
### 2. 进入安装位置
```bash
cd /usr/local
```
### 3. 下载Maven安装包
```bash
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
```
### 4. 解压压缩包
```bash
tar -zxvf apache-maven-3.3.9-bin.tar.gz
```
### 5. 删除压缩包
```bash
rm apache-maven-3.3.9-bin.tar.gz
```
### 6. 配置Maven环境变量
```bash
vi /etc/profile
```
在文件的最下面添加:
```bash
#set Maven environment
export MAVEN_HOME=/usr/local/maven
export PATH=$MAVEN_HOME/bin:$PATH
```
### 7. 生效profile文件
```bash
source /etc/profile
```
### 8. 检查Maven是否配置成功(显示maven home、java home等信息则配置成功)
```bash
mvn -v
```
## Jenkins管理页面的配置和插件安装步骤:请参考相关文档。
以下是重构后的内容:
### JDK配置
如果你的Jenkins默认已经安装了OpenJDK,那么你可以通过查看系统信息来确认。在环境变量中找到`JAVA_HOME`,如果没有设置,你可以手动设置它。你也可以选择让Jenkins自动安装。
### Maven配置
如果你之前手动安装过Maven,那么你需要指定Maven的安装目录。否则,你可以选择让Jenkins自动安装Maven。
### SSH remote hosts
SSH remote hosts允许你在Jenkins上连接远程服务器并执行shell脚本。以下是操作步骤:
1. 在Jenkins主界面 -> 系统管理 -> 插件管理,安装SSH plugin插件。这个插件使用SSH协议远程执行shell命令。
2. 在Jenkins主界面 -> 系统管理 -> 系统配置,找到SSH remote hosts,对SSH进行配置以便能连接到远程服务器。
3. 最后,点击应用并保存!
### 构建maven项目
下面是如何新建一个Item以及如何配置你的任务:
1. 新建Item,会出现一个新的页面,在那里你可以填写项目的详细信息。
2. 然后进入到Item里面,在这里你可以配置你的任务,包括输入源代码的位置,构建触发器等等。
### Git配置
如果你要从Git存储库获取代码,你需要先添加一个Git凭据提供者。这需要你填写你的Git账号和密码。然后你需要在Credentials中选择刚刚添加的凭据者。这样,当任务触发时,Jenkins就能自动从Git获取最新的代码了。
以下是根据您提供的内容重构的代码,并保持了段落结构:
```bash
#!/bin/bash
# 根据Docker容器名称停止dec-netty容器
result=$(docker ps| grep "dec-netty")
if [[ "$result" != "" ]]; then
echo "================docker stop dec-netty================"
docker stop dec-netty
fi
# 根据Docker容器名称移除dec-netty容器
result1=$(docker ps -a | grep "dec-netty")
if [[ "$result1" != "" ]]; then
echo "================docker rm dec-netty================"
docker rm dec-netty
fi
# 根据Docker镜像名称移除dec-netty镜像
result2=$(docker images | grep "dec-netty:0.0.1")
if [[ "$result2" != "" ]]; then
echo "================docker rmi dec-netty:0.0.1================"
docker rmi dec-netty:0.0.1
fi
```
以上代码是一个Bash脚本,主要功能如下:
1. 通过`docker ps`命令查找名为"dec-netty"的Docker容器,并通过管道将结果传递给`grep`进行筛选。如果找到了匹配的结果,则执行相应的操作。
2. 如果找到了以"dec-netty"为参数的容器,则使用`echo`输出停止容器的信息,并且调用`docker stop`命令停止该容器。
3. 接着,再次使用`docker ps -a`命令和`grep`筛选所有包含"dec-netty"的容器。与之前的步骤类似,如果找到了匹配的结果,则执行相应的操作。
4. 如果找到了名为"dec-netty"的容器,则使用`echo`输出删除该容器的信息,并且调用`docker remove`命令移除该容器。
5. 最后,使用`docker images`命令和`grep`筛选出包含"dec-netty:0.0.1"的镜像。与之前类似,如果找到了匹配的结果,则使用`echo`输出删除该镜像的信息,并调用`docker removei`命令移除该镜像。
另外,您提到需要构建Maven项目并通过DockerFile将其构建成Docker镜像。以下是示例的Maven构建命令和相关的Dockerfile内容:
```bash
# Maven命令(通过DockerFile将项目构建成docker镜像)
clean package docker:build
```
假设您在项目的根目录下运行上述命令,它会先清理项目、打包应用程序,然后使用Dockerfile将项目构建成名为"dec-netty:0.0.1"的Docker镜像。具体的Dockerfile内容可能类似于以下示例:
```Dockerfile
FROM openjdk:8-jdk-alpine AS build
WORKDIR /app/src/main/java/your/package/name
COPY pom.xml pom.xml
COPY src src
RUN mvn clean package docker:build --no-transfer-progress=true --settings settings.xml --batch-mode
```
请根据您的实际情况修改其中的包名、源代码路径和设置文件路径等信息。这个示例使用了OpenJDK 8的基础镜像,并在工作目录中放置了项目的源代码和配置文件。然后使用Maven命令构建应用程序的Docker镜像,并指定了一些参数来优化构建过程。
```xml
请根据提供的内容完成内容重构,并保持段落结构:
# 修改Docker配置,允许远程访问
vi /lib/systemd/system/docker.service
在`ExecStart=`后,斜杠(\)前,添加配置:
```
-H tcp://0.0.0.0:1689
-H unix:///var/run/docker.sock
```
修改后的配置如下:
```
ExecStart=/usr/bin/dockerd -H fd:// \n -H tcp://0.0.0.0:1689 \n -H unix:///var/run/docker.sock \n --containerd=/run/containerd/containerd.sock
```
修改后刷新配置,重启服务:
```
systemctl daemon-reload
systemctl restart docker
```
FROM java:8
MAINTAINER luzc
COPY app.jar /
ENTRYPOINT ["java", "-jar", "app.jar"]
配置Post Steps(运行容器):
```
docker run -d --name dec-netty -p 12025:8080 dec-netty:0.0.1 echo '================ 运行容器日志信息 ================' #打印容器的运行日志 docker logs -f dec-netty
```
最后,点击“应用”并保存!
构建任务:
点击第2步的构建列队中的任务,查看任务的日志信息......如果显示“Finished: SUCCESS”,则说明Jenkins自动构建成功!!!
自动构建:前面都是通过Jenkins手动进行项目部署,Jenkins强大的原因是自动帮你持续部署项目。当项目push到git上时,Jenkins就会去git上拉取代码进行构建。下面我将介绍git两种方法进行自动构建。
Gitblit:
编辑jenkins.groovy文件:在git目录/data/groovy/jenkins.groovy。注意:保存后,需要重启Gitblit服务。这里的Gitblit的版本是1.8.0,所以配置Jenkins地址有所不同。Gitblit配置钩子(hooks)。
您好!根据您的提供的内容,您需要将Jenkins添加到Gitblit中的项目目录中,以便在push代码时自动构建项目。您可以按照以下步骤操作:
1. 进入Gitblit中的项目目录,点击“编辑”。
2. 点击“receive”。
3. 在“pre-receive 脚本”中将jenkins移入Selected选择栏中,然后点击“保存”。
4. 配置jenkins的任务。
5. 点击“应用并保存”。
这样,当您push代码时,Jenkins就会自动帮您构建项目了。Gitblit的Jenkins groovy插件会调用Jenkins的钩子来按需建立这种方式。
## 查看镜像版本信息
### 方法一:使用docker search命令
```bash
docker search 镜像名称
```
### 方法二:使用docker pull命令
```bash
docker pull 镜像名称:标签号
```
## 列出已有镜像
```bash
docker images
```
## 导出镜像
```bash
docker save 镜像名称:标签号 > /目标路径/镜像.tar.gz
```
例如:
```bash
docker save centos7:latest > /root/centos7.tar.gz
```
## 导入镜像
```bash
docker load < /目标路径/镜像.tar.gz
```
## 移除镜像
```bash
docker rmi 镜像名称:标签号
```
## 运行容器(方法一:守护进程)
```bash
docker run -d --name 容器名称 -p 宿主机端口:容器端口 --privileged=true 镜像名称:标签号
```
## 运行容器(方法二:交互)
```bash
docker run -it --name 容器名称 -p 宿主机端口:容器端口 --privileged=true 镜像名称:标签号 /bin/bash
```
## 查看容器正在启动情况
```bash
docker ps
```
## 查看容器所有启动情况(包括已停止的)
```bash
docker ps -a
```
## 进入容器(需要手动输入密码)
```bash
docker exec -it 容器名称 /bin/bash
```
## 退出容器(exit命令)或者关闭容器(先执行stop命令,再执行exit命令)
```bash
exit 或者 docker stop 容器名称/容器ID && exit 或者 docker stop 容器名称/容器ID && docker rm 容器名称/容器ID && exit 或者 docker stop 容器名称/容器ID && docker rm 容器名称/容器ID && docker kill $(docker ps -q -f name=容器名称) && exit 或者 docker stop 容器名称/容器ID && docker rm 容器名称/容器ID && docker kill $(docker ps -q -f name=容器名称) && exit 或者 docker stop 容器名称/容器ID && docker rm 容器名称/容器ID && docker kill $(docker ps -q -f name=容器名称) && exit 或者 docker stop 容器名称/容器ID && docker rm 容器名称/容器ID && docker kill $(docker ps -q -f name=容器名称) && exit 或者 docker stop 容器名称/容器ID && docker rm 容器名称/容器ID && docker kill $(docker ps -q -f name=容器名称) && exit 或者 docker stop 容器名称/容器ID && docker rm 容器名称/容器ID && docker kill $(docker ps -q -f name=容器名称) && exit 或者 docker stop 容器名称/容器ID && docker rm container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id && exit 或者 docker stop container_id && docker remove container_id
```bash
# 创建文件
mkdir 文件名
# 复制粘切文件
mv 原文件目录 目标文件目标
# 删除文件
rm 删除文件目录
# 删除文件夹
rm -rf 删除文件夹目录
# 查看防火墙状态
systemctl status firewalld
# 暂停防火墙状态
systemctl stop firewalld
# 启动防火墙状态
systemctl start firewalld
# 永久关闭防火墙(关机重启才会生效)
systemctl disable firewalld
# 开放端口号
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
firewall-cmd --reload
# 移除端口号
firewall-cmd --zone=public --remove-port=端口号/tcp --permanent
# 查看所有开放端口列表
firewall-cmd --zone=public --list-ports
# 查看某应用进程
ps -ef | grep 应用名
# 查看某端口
netstat -lnp|grep 端口名
# 查找所有yum包
yum list all
# 根据关键字查询 yum list all|grep 关键字
yum list all|grep 关键字
# 安装基本依赖,wget 网页下载,lrzsz上传下载,bash-completion tab补全,vim 编辑器,yum install wget,lrzsz,bash-completion,vim -y
yum install wget lrzsz bash-completion vim -y
# 设置服务开机启动 chkconfig 服务名 on
# 查找文件:从根目录开始找 find / -name 文件名 #安装zip解压 yum install unzip -y #解压zip包 unzip 包名.zip #查看内存占用情况 free -g #查看硬盘内存 df -h
find / -name 文件名 #安装zip解压 yum install unzip -y #解压zip包 unzip 包名.zip #查看内存占用情况 free -g #查看硬盘内存 df -h
```