侧边栏壁纸

Docker 安装 Jenkins 实现自动打包部署

2024年10月20日 209阅读 0评论 1点赞

Jenkins 是一个用来实现自动化部署的工具,在应用开发中非常有用。本文将详细记录如何通过 Docker 安装 Jenkins 的过程。

前置条件

在开始前,需要确保你的机器上已经安装了 JDK。可以通过以下命令来安装 OpenJDK 1.8 版本:

yum install -y java-1.8.0-openjdk.x86_64

确认 JDK 已成功安装后,我们就可以开始安装 Jenkins。

在 Docker 上安装 Jenkins

1. 查找 Jenkins 镜像

首先,查询 Docker 中有哪些可用的 Jenkins 镜像:

docker search jenkins

2. 拉取 Jenkins 镜像

从 Docker Hub 中拉取 Jenkins 的指定版本镜像,这里我们选择 2.414.2 版本:

docker pull jenkins/jenkins:2.414.2

3. 运行 Jenkins 容器

运行 Jenkins 并设置一些基本参数:

docker run -d -u root -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime --name jenkins jenkins/jenkins:2.414.2
  • -d:以后台模式运行容器。
  • -u root:以 root 用户运行 Jenkins,方便访问系统文件。
  • -p 8080:8080:将容器的 8080 端口映射到主机的 8080 端口,用于连接 Jenkins。
  • -p 50000:50000:用于 Jenkins agent 的连接。
  • -v /var/jenkins_home:/var/jenkins_home:挂载数据卷以持久化 Jenkins 的数据。

4. 启动 Jenkins

启动 Jenkins 容器:

docker start jenkins

查看docker正在运行的容器:

docker ps -a

m2f3zl0p.png

此时 Jenkins 已经启动完成,可以通过浏览器访问 http://<服务器IP>:8080 来连接 Jenkins。首次访问可能需要一些时间来等待启动过程完成。建议使用内存较大的服务器,因为内存不足的云服务器可能会导致 Jenkins 启动失败。

获取 Jenkins 初始密码

启动完成后,可以通过查看 Jenkins 容器的日志来获取初始密码:

docker logs jenkins

m2f423oe.png

然后,在访问 Jenkins("<服务器IP>:8080")时,在页面上输入获取到的初始密码即可。
m2f43i6x.png

在此步骤中,可以选择安装方式,推荐安装默认插件以获得最佳体验
m2f46icz.png

在这个界面等待安装完成
m2f47lvw.png

安装完成后会需要创建一个管理员账户,创建完后点击保存并完成
m2f4dunn.png

完成管理员账户的创建后,点击保存并继续以完成配置过程
m2f4h3uw.png

大功告成!
m2f4hfh6.png

然后点击新建item
m2f4y0ej.png

输入任务名称,选择Freestyle project
m2f4zy3p.png

配置源码管理,选择git,填写项目地址并添加凭证
m2f6dyag.png

由于github已经取消使用账号和密码的方式来连接仓库,否则会拒绝访问,所以这里配置使用ssh密钥的方式。


配置jenkins的maven版本

为了在Jenkins上运行Maven构建任务,我们需要在系统上安装Maven。

1 下载并解压Maven

前往 Maven官网 下载所需版本的Maven压缩包,或者直接使用命令下载并解压:

# 下载 Maven (以版本3.8.8为例)
wget https://downloads.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz

# 解压并移动到 /opt 目录
sudo tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /opt

2 配置环境变量

接下来配置Maven的环境变量,以便系统中的所有用户都可以访问Maven:

# 编辑 /etc/profile 文件
sudo vi /etc/profile

在文件末尾添加以下内容:

export M2_HOME=/opt/apache-maven-3.8.8
export PATH=$M2_HOME/bin:$PATH

然后加载环境变量:

source /etc/profile

验证Maven是否安装成功:

mvn -v

3. 在Jenkins中配置Maven

3.1 登录Jenkins

在浏览器中访问Jenkins的地址,通常是 http://<服务器IP>:8080,登录到Jenkins管理界面。

3.2 安装Maven Integration插件

为了在Jenkins中使用Maven,我们需要安装Maven Integration插件:

  1. 点击 "Manage Jenkins" (管理Jenkins)。
  2. 点击 "Manage Plugins" (管理插件)。
  3. 选择 "Available" (可用) 选项卡。
  4. 搜索 "Maven Integration",然后安装该插件。

3.3 配置Maven

  1. 在Jenkins主界面,点击 "Manage Jenkins"。
  2. 点击 "Global Tool Configuration" (全局工具配置)。
  3. 滑动到 "Maven" 部分,点击 "Add Maven" (添加Maven)。
  4. 给Maven设置一个名称,例如 "Maven 3.8.8"。
  5. 取消选择 "Install automatically" (自动安装),并在 "MAVEN_HOME" 中填写之前Maven的安装路径,例如:

    /opt/apache-maven-3.8.8
  6. 保存设置。

4. 配置Jenkins任务使用Maven

在为某个项目配置构建任务时,可以选择使用Maven:

  1. 新建一个 "Freestyle project"。
  2. 在构建部分,选择 "Invoke top-level Maven targets"。
  3. 在 "Maven Version" 下拉框中选择之前配置的Maven版本 (例如 "Maven 3.8.8")。
  4. 在 "Goals" 中填写需要执行的Maven命令,例如 clean install

5. 验证配置

保存任务配置后,点击 "Build Now" (立即构建),观察构建日志,确认Maven已经正确执行。

6. 可能遇到的问题

6.1 环境变量未生效

如果Maven未能成功运行,可能是环境变量没有正确加载,建议重新加载环境变量或重启Jenkins:

# 重启Jenkins
sudo systemctl restart jenkins

6.2 权限问题

确保Jenkins用户对Maven的安装目录有读执行权限,可以通过以下命令修改权限:

sudo chmod -R 755 /opt/apache-maven-3.8.8

在Jenkins中配置部署时,我使用了“Send files or execute commands over SSH”插件来自动化应用程序的部署。以下是我配置的脚本详细步骤和说明,脚本主要用于停止正在运行的Java应用并重新启动新版本。

配置过程

首先,我在Jenkins中使用了 Send files or execute commands over SSH 来执行脚本,通过SSH命令将构建生成的文件拷贝到服务器指定路径,并进行应用的停止和启动操作。

文件复制部分

cp /var/jenkins_home/workspace/jc-club-subject/jc-club-subject/jc-club-starter/target/jc-club-starter.jar /var/jenkins_home/jar/

这条命令的作用是将构建好的 jc-club-starter.jar 文件从Jenkins的工作空间复制到目标目录 /var/jenkins_home/jar/ 中,以便后续进行启动操作。

脚本内容

下面的脚本用于停止正在运行的应用并重新启动新的版本:

#!/bin/bash
APP_NAME=jc-club-starter.jar
LOG_NAME=jc-club-starter.log

pid=`ps -ef | grep $APP_NAME | grep -v grep|awk '{print $2}'`

function is_exist(){
  pid=`ps -ef | grep $APP_NAME | grep -v grep|awk '{print $2}'`
  if [ -z ${pid} ]; then
    String="notExist"
    echo $String
  else
    String="exist"
    echo $String
  fi
}

str=$(is_exist)
if [ ${str} = "exist" ]; then
  echo " 检测到已经启动的程序,pid 是 ${pid} "
  kill -9 $pid
else
  echo " 程序没有启动了 "
  echo "${APP_NAME} is not running"
fi

str=$(is_exist)
if [ ${str} = "exist" ]; then
  echo "${APP_NAME} 已经启动了. pid=${pid} ."
else
  source /etc/profile
  BUILD_ID=dontKillMe
  nohup java -Xms300m -Xmx300m -jar /var/jenkins_home/jar/$APP_NAME >$LOG_NAME 2>&1 &
  echo "程序已重新启动..."
fi

脚本解析

  1. 定义变量

    • APP_NAME=jc-club-starter.jar:指定要启动的Java应用程序的名称。
    • LOG_NAME=jc-club-starter.log:指定日志文件名称。
  2. 检查应用是否存在

    • 通过 is_exist 函数来检测应用是否正在运行。
    • 使用 ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}' 来获取应用的进程ID(PID)。
    • 如果没有找到PID,则表示应用没有运行。
  3. 停止正在运行的应用

    • 调用 is_exist 函数,如果返回 exist,说明程序正在运行,则使用 kill -9 $pid 强行停止该进程。
    • 如果程序未启动,则打印信息提示。
  4. 重新启动应用

    • 再次调用 is_exist 函数来确认应用是否已被停止。
    • 如果程序未运行,使用 nohup 命令重新启动应用。
    • source /etc/profile:加载环境变量。
    • BUILD_ID=dontKillMe:防止Jenkins自动杀死后台运行的进程。
    • nohup java -Xms300m -Xmx300m -jar /var/jenkins_home/jar/$APP_NAME >$LOG_NAME 2>&1 &:以 nohup 方式启动应用,并将日志输出到指定的日志文件中。
1
打赏

—— 评论区 ——

昵称
邮箱
网址
取消
人生倒计时
舔狗日记