Jenkins 是一个用来实现自动化部署的工具,在应用开发中非常有用。本文将详细记录如何通过 Docker 安装 Jenkins 的过程。
在开始前,需要确保你的机器上已经安装了 JDK。可以通过以下命令来安装 OpenJDK 1.8 版本:
yum install -y java-1.8.0-openjdk.x86_64
确认 JDK 已成功安装后,我们就可以开始安装 Jenkins。
首先,查询 Docker 中有哪些可用的 Jenkins 镜像:
docker search jenkins
从 Docker Hub 中拉取 Jenkins 的指定版本镜像,这里我们选择 2.414.2 版本:
docker pull jenkins/jenkins:2.414.2
运行 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 的数据。启动 Jenkins 容器:
docker start jenkins
查看docker正在运行的容器:
docker ps -a
此时 Jenkins 已经启动完成,可以通过浏览器访问 http://<服务器IP>:8080
来连接 Jenkins。首次访问可能需要一些时间来等待启动过程完成。建议使用内存较大的服务器,因为内存不足的云服务器可能会导致 Jenkins 启动失败。
启动完成后,可以通过查看 Jenkins 容器的日志来获取初始密码:
docker logs jenkins
然后,在访问 Jenkins("<服务器IP>:8080")时,在页面上输入获取到的初始密码即可。
在此步骤中,可以选择安装方式,推荐安装默认插件以获得最佳体验
在这个界面等待安装完成
安装完成后会需要创建一个管理员账户,创建完后点击保存并完成
完成管理员账户的创建后,点击保存并继续以完成配置过程
大功告成!
然后点击新建item
输入任务名称,选择Freestyle project
配置源码管理,选择git,填写项目地址并添加凭证
由于github已经取消使用账号和密码的方式来连接仓库,否则会拒绝访问,所以这里配置使用ssh密钥的方式。
要配置 Jenkins 与 Git 之间的凭证连接,我们可以通过生成并使用 SSH 私钥和公钥来实现。这是一个安全且常见的做法,确保 Jenkins 能够访问你的代码库。以下是配置的完整步骤。
首先,我们需要在服务器上生成 SSH 密钥对,用于 Jenkins 连接 Git 代码库。请使用以下命令生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096 -C "jenkins@example.com"
-t rsa
:指定密钥类型为 RSA。-b 4096
:密钥长度为 4096 位。-C "jenkins@example.com"
:为密钥加上注释,以便识别。
在命令执行后,系统会询问你密钥的存储位置,默认位置一般为 ~/.ssh/id_rsa
。你也可以为其指定一个新的存储路径。
生成密钥对后,接下来要获取公钥内容,以便添加到代码库的版本控制系统中,确保 Jenkins 能够克隆代码。执行以下命令查看公钥:
cat ~/.ssh/id_rsa.pub
将输出的公钥内容复制下来,然后登录到你代码仓库的控制台(例如 GitHub、GitLab 或 Bitbucket),将公钥添加到仓库的 Deploy keys 或 SSH keys 选项中,授予 Jenkins 对仓库的读权限。
现在,我们需要将私钥配置到 Jenkins 中,确保 Jenkins 在运行构建任务时能够使用 SSH 凭证访问代码仓库。
在 Kind(类型)下拉菜单中选择 SSH Username with private key(带私钥的 SSH 用户名)。
jenkins
。Private Key(私钥):选择 Enter directly(直接输入),然后将之前生成的 SSH 私钥内容粘贴到这里。可以使用以下命令查看私钥内容:
cat ~/.ssh/id_rsa
将输出的内容复制粘贴到 Jenkins 的 Private Key 文本框中。
为了在Jenkins上运行Maven构建任务,我们需要在系统上安装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
接下来配置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
在浏览器中访问Jenkins的地址,通常是 http://<服务器IP>:8080
,登录到Jenkins管理界面。
为了在Jenkins中使用Maven,我们需要安装Maven Integration插件:
取消选择 "Install automatically" (自动安装),并在 "MAVEN_HOME" 中填写之前Maven的安装路径,例如:
/opt/apache-maven-3.8.8
在为某个项目配置构建任务时,可以选择使用Maven:
clean install
。保存任务配置后,点击 "Build Now" (立即构建),观察构建日志,确认Maven已经正确执行。
如果Maven未能成功运行,可能是环境变量没有正确加载,建议重新加载环境变量或重启Jenkins:
# 重启Jenkins
sudo systemctl restart jenkins
确保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
定义变量
APP_NAME=jc-club-starter.jar
:指定要启动的Java应用程序的名称。LOG_NAME=jc-club-starter.log
:指定日志文件名称。检查应用是否存在
is_exist
函数来检测应用是否正在运行。ps -ef | grep $APP_NAME | grep -v grep | awk '{print $2}'
来获取应用的进程ID(PID)。停止正在运行的应用
is_exist
函数,如果返回 exist
,说明程序正在运行,则使用 kill -9 $pid
强行停止该进程。重新启动应用
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
方式启动应用,并将日志输出到指定的日志文件中。
—— 评论区 ——