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

4.0.0

com.deceen

netty-parent

2.0.8.RELEASE

dec-netty

0.0.1

dec-netty

jar

Netty即时通讯

org.springframework.boot

spring-boot-starter-web

io.netty

netty-all

4.1.31.Final

com.alibaba

fastjson

1.2.59

org.apache.commons

commons-lang3

app

org.springframework.boot

spring-boot-maven-plugin

true

com.DecNettyApplication

repackage

com.spotify

docker-maven-plugin

1.0.0

${project.artifactId}:${project.version}

src/main/docker

"${project.build.directory}"

"${project.build.finalName}.jar"

"http://61.185.75:1689"

org.apache.maven.plugins

maven-compiler-plugin

"8""8"]]> ```

请根据提供的内容完成内容重构,并保持段落结构:

# 修改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

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

```