一、Jenkins介绍
Jenkins 是一个开源的自动化构建与集成工具。它提供了一种易于使用的方式来持续集成和持续交付软件项目,以减少人工干预的需要并提高效率。Jenkins 可以与几乎所有编程语言和构建工具集成,包括 Java、C++、Python、Ruby、Node.js、Gradle、Maven 等等。
Jenkins 可以自动执行以下操作:
- 从版本控制系统中拉取代码。
- 自动构建代码并运行单元测试、集成测试等自动化测试。
- 部署应用程序到预先定义的环境中,如开发、测试、生产等。
- 发布构建报告和通知团队。
Jenkins 还提供了许多插件,可以扩展其功能,如支持代码静态分析与代码质量检查,版本控制系统的集成,自动部署到云端等。
二、Jenkins的下载和安装
1. 官网下载相应版本。
[打开下载链接](https://www.jenkins.io/download/),这里分为两个目录,左边是稳定版,右边是最新版。这里使用docker安装jenkins
docker search jenkins
2. 获取jenkins镜像
docker pull jenkins
3. 查看已下载的镜像
docker images
4. 修改目录权限
mkdir -p /home/local/docker/jenkins/jenkins_home
5. 构建Jenkins容器
docker run
-d
-u root
–name jenkins
-p 8080:8080
-v /usr/local/java/jdk1.8.0_381:/usr/local/java
-v /usr/local/maven/apache-maven-3.9.3:/usr/local/maven
-v /home/local/docker/jenkins/jenkins_home:/var/jenkins_home
–restart=always
jenkins/jenkins;
说明:
docker run
-d # 标识是让 docker 容器在后台运行
-u root 以root用户运行
–name jenkins # jenkins名字
-p 8080:8080 # jenkins的默认端口
-v /usr/local/java/jdk1.8.0_381:/usr/local/java # jdk的数据卷
-v /usr/local/maven/apache-maven-3.9.3:/usr/local/maven # maven的数据卷
-v /home/local/docker/jenkins/jenkins_home:/var/jenkins_home # jenkins工作空间目录
–restart=always 容器的重启策略
jenkins/jenkins # 构建jenkins容器基于的镜像及版本
创建完通过 docker ps -a 查看
6. 进入容器内部 docker exec -it jenkins bash
执行:cat /var/jenkins_home/secrets/initialAdminPassword,得到密码
7. 访问jenkins: http://154.152.67.170:8080/,输入上面的密码
8. 安装插件
9.创建管理员账户
10.配置实例
11.登录进入jenkins并配置全局工具JDK1.8和Maven
三、Jenkins Pipeline的使用
1.安装pipeline插件
2.配置SSH Server
3.新建一个pipeline项目
4.编写Jenkinsfile和deploy.sh
Jenkinsfile:
pipeline {
agent any
tools {
maven 'maven'
}
stages {
stage('Fetch Code') {
steps {
checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '988081f7-b728-450b-9b37-2c27724437fe', url: 'https://gitee.com/xxx/spring-boot-demo.git']])
}
}
stage('Maven Build') {
steps {
sh 'mvn clean package'
}
}
stage('Deploy') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'kk', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '/tmp/applications/spring-boot-demo/deploy.sh', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/tmp/applications/spring-boot-demo/', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/spring-boot-demo-0.0.1-SNAPSHOT.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: true)])
}
}
}
}
deploy.sh:
#!/bin/bash
source /etc/profile
basedir=/tmp/applications/spring-boot-demo
filename=spring-boot-demo-0.0.1-SNAPSHOT.jar
rundir=$basedir/run
logfile=$rundir/start.log
pid=`ps -ef | grep $filename | grep -v 'grep' | awk '{print $2}'`
echo "last pid: $pid"
if [ -n "$pid" ]
then
kill -9 $pid
else
echo "no running application"
fi
cp -rf $basedir/$filename $rundir
cd $rundir
chmod 777 -R $rundir/$filename
sleep 5s
echo "execute run application command start"
nohup /usr/local/java/jdk1.8.0_381/bin/java -jar $rundir/$filename > $logfile 2>&1 &
echo "execute run application command end"
sleep 5s
pid=`ps -ef | grep $filename | grep -v 'grep' | awk '{print $2}'`
if [ -n "$pid" ]
then
echo "pid: $pid"
echo "application started successfully"
else
echo "application start failure"
fi
5.修改配置
6.点击立即构建
四、Jenkins 安装和使用过程中常见的问题
1.“/bin/bash^M: bad interpreter”
1.1 错误描述
bash: /tmp/applications/spring-boot-demo/deploy.sh: /bin/bash^M: bad interpreter: No such file or directory
1.2 根本原因
dos下创建的unix脚本
1.3 解决方法:
将脚本文件的格式转换为Unix格式,命令:dos2unix deploy.sh
如果没有安装dos2unix,则需先安装,安装命令:yum -y install dos2unix*