目录
什么是 Jenkins
Jenkins 是一个开源的自动化服务器,主要用于持续集成(CI,Continuous Integration)和持续交付/持续部署(CD/CD,Continuous Delivery/Continuous Deployment)。它帮助开发团队自动化构建、测试、部署和交付软件的过程,从而提高软件开发的效率和质量。
Jenkins 下载安装
Jenkins启动包官网下载地址:https://www.jenkins.io/download/
下载完成后把 jenkins.war 包上传到 Linux 服务器上 (windows 或 linux 都是这个包)
注意:如果jenkins版本太高,需要使用JDK11或更高才能启动Jenkins服务。并不影响你在 Jenkins 中构建或部署使用 JDK 8 开发的代码。
Linux 环境准备
JDK17:用于启动Jenkins服务
JDK8:你的代码中使用的是JDK8的话,Jenkins使用JDK8编译打包你的代码。
Maven3.6+:Jenkins编译你的代码需要的maven版本。
Git:Jenkins拉取你的Git仓库代码。git 已经把 ssh 公钥配置到git代码仓库。
SSH:Linux服务器允许用户远程连接到系统,进行管理、维护和文件传输。
启动 Jenkins 服务,命令如下:
java -jar jenkins.war
# httpPort:指定 jenkins服务的端口
# prefix:指定 jenkins服务的根目录
java -jar jenkins.war --httpPort=8080 --prefix=/myjenkins
# 指定 jenkins服务的最小内存了最大内存
java -Xms512m -Xmx4g jenkins.war --httpPort=8080 --prefix=/myjenkins
浏览器打开 Jenkins 页面:http://127.0.0.1:8080/
安装推荐的插件,因为我们不知道要安装哪些插件,推荐的插件会把保证使用的插件安装上来
插件安装中,等待插件安装完成
插件安装完成之后,会进入到创建管理员账号密码页面
修改 admin 账号的密码
因为上面的admin账号的密码不生效,还是原来的 /root/.jenkins/secrets/initialAdminPassword 路径下的密码,所以这里要修改一下密码
Jenkins 环境配置
配置 中文插件
搜索 local 和 Localization: Chinese 插件,点击 Install after restart 安装后重启Jenkins服务
进入 Dashboard->Manage Jenkins->Appearance,配置如下
配置 Maven 插件
1. 下载 Maven 插件
搜索 Maven Integration,点击 Install after restart 安装后重启Jenkins服务
2. 配置 Maven
进入 Dashboard->Manage Jenkins->Tools
配置 JDK
进入 Dashboard->Manage Jenkins->Tools
配置 Git
进入 Dashboard->Manage Jenkins->Tools
linux 使用 which git 命令查看 git可执行文件的路径
配置 Git 登录的账户密码
进入 Dashboard->Manage Jenkins->Credentials
配置 SSH 远程服务器
下载 Publish Over SSH 插件,下载完成之后重启 jenkins 服务。
配置 远程服务器
进入 Dashboard->Manage Jenkins->System
Jenkins 项目配置
构建 maven 项目
1. 新建 maven 项目
2. 配置任务Git
保存之后构建,就可以看到 jenkins 在向 git 仓库中拉取代码了
如果还想maven构建完成之后再发布,因为主要讲的不是maven项目,所以还想maven发布的,请看这里 https://download.csdn.net/download/a1053765496/11192998
构建 pipeline 流水线项目
下载 pipeline、blue ocean 插件,下载完成之后重启 jenkins 服务。
1. 新建流水线任务
2. 编写声明式流水线脚本
脚本结构如下:
pipeline{
agent any
tools {
jdk 'jdk1.8'
}
stages{
stage("拉取代码"){
steps {
echo '拉取成功'
}
}
}
post{
always{
echo 'always say goodbay'
}
}
}
脚本说明
pipeline{ // 声明这是一个 Pipeline 脚本
agent any // 表示这个 Pipeline 可以在任何可用的 Jenkins 节点(agent)上运行。
// agent none # 表示在 Pipeline 的顶层不指定任何全局的 agent,通常用于在每个 stage 中单独指定 agent。适用于需要在不同阶段使用不同环境的情况。
// agent { // 使用指定的 Docker 镜像作为运行环境。Jenkins 会启动一个 Docker 容器来运行 Pipeline
// docker {
// image 'maven:3.6.3-jdk-8'
// label 'docker'
// }
// }
// agent ... 还有很多写法
tools {
jdk 'jdk1.8' // 指定 mvn 命令使用的jdk版本, 这里的 'jdk1.8' 是在全局工具配置中设置的 JDK 名称
}
stages{ // 定义了流水线的不同阶段(stages),每个阶段包含一个或多个步骤(steps)
stage("拉取代码"){ // 表示一个阶段,包含一个名称和一些步骤。
steps { // 定义了该阶段内的步骤,可以是 shell 脚本、构建命令等。
echo '拉取成功'
}
}
}
post{ // post 可选的块,位于 Pipeline 的最后,用于定义构建结束后无论成功或失败都要执行的动作。你可以根据不同的构建状态(如成功、失败等)来设置相应的操作。
always {
echo 'This always runs, no matter what the build result is.'
// 无论构建状态如何,这个步骤都会执行。
}
success {
echo 'Build was successful!'
// 可以在这里添加成功时需要执行的步骤,例如通知或归档工件
}
failure {
echo 'Build failed!'
// 在构建失败时执行的操作,例如发送失败通知
}
unstable {
echo 'Build is unstable.'
// 在构建状态为不稳定时执行的操作
}
aborted {
echo 'Build was aborted!'
// 在构建被手动中止时执行的操作
}
changed {
echo 'Build status has changed!'
// 在构建状态发生变化时执行的操作
}
}
}
打印 pipeline 工作目录,拉取下来的代码就存在工作目录中
pipeline {
agent any
stages {
stage('打印 pipeline 工作目录') {
steps {
script {
echo "Workspace: ${env.WORKSPACE}"
}
}
}
}
}
修改 pipeline 工作目录
pipeline{
agent any
stages{
stage("拉取代码"){
steps {
dir('/app/aaa') { # 修改工作目录,这样 git 拉取下来的代码就在修改后的目录,可以一个项目一个目录,避免多个项目在一个目录下的混乱
git branch: 'test', credentialsId: 'cedc056b-9f2d-4375-be48-f0d124ca069c', url: 'git@codeup.aliyun.com:659542b3e7f9ce3ec819b592/demo.git'
echo '拉取成功'
}
}
}
}
}
3. 使用 pipeline 脚本自动拉取 git 仓库的代码
pipeline{
agent any
stages{
stage("Git拉取代码"){
steps {
dir('/app/aaa') {
git branch: 'test', credentialsId: 'cedc056b-9f2d-4375-be48-f0d124ca069c', url: 'git@codeup.aliyun.com:659542b3e7f9ce3ec819b592/demo.git'
echo '拉取成功'
}
}
}
}
}
4. 使用 maven 打包拉取下来的代码
pipeline{
agent any
tools {
jdk 'jdk1.8' // 指定 mvn 命令使用的jdk, 这里的 'jdk1.8' 是在全局工具配置中设置的 JDK 名称
}
stages{
stage("Git拉取代码"){
steps {
dir('/app/aaa') { // 指定 pipeline 的工作目录
git branch: 'test', credentialsId: 'cedc056b-9f2d-4375-be48-f0d124ca069c', url: 'git@codeup.aliyun.com:659542b3e7f9ce3ec819b592/demo.git'
echo '拉取成功'
}
}
}
stage("Maven打包代码"){
steps {
dir('/app/aaa') { // 指定 pipeline 的工作目录
// shell 脚本代码, 不需要加 #!/bin/bash 因为 sh 时 Jenkins 默认会使用 Shell 来运行这些命令。 sh """执行多行shell脚本命令的语法"""
sh """
mvn clean install -Dmaven.test.skip=true
"""
echo '构建完成'
}
}
}
}
}
5. 发送 jar 包到测试/生产服务器
编写 pipeline 脚本
pipeline{
agent any
tools {
jdk 'jdk1.8' // 指定 mvn 命令使用的jdk, 这里的 'jdk1.8' 是在全局工具配置中设置的 JDK 名称
}
stages{
stage("Git拉取代码"){
steps {
dir('/app/aaa') {
git branch: 'test', credentialsId: 'cedc056b-9f2d-4375-be48-f0d124ca069c', url: 'git@codeup.aliyun.com:659542b3e7f9ce3ec819b592/demo.git'
echo '拉取成功'
}
}
}
stage("Maven构建代码"){
steps {
dir('/app/aaa') {
// shell 脚本代码, 不需要加 #!/bin/bash 因为 sh 时 Jenkins 默认会使用 Shell 来运行这些命令。 sh """执行多行shell脚本命令的语法"""
sh """
mvn clean install -Dmaven.test.skip=true
"""
echo '构建完成'
}
}
}
stage("推送到测试服务器"){
steps {
dir('/app/aaa') {
sshPublisher(publishers: [sshPublisherDesc(configName: '24服务器', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'nohup java -jar /app/bbb/demo.jar > /dev/null 2>&1 & ', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/app/bbb', remoteDirectorySDF: false, removePrefix: 'java_project/target/', sourceFiles: 'java_project/target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}
}
Jenkins 用户权限配置
下载 Role-based Authorization Strategy,下载完成之后重启 jenkins 服务。
进入 Dashboard->Manage Jenkins->Security
新建一个 test 用户
新建一个全局的 test_role 的角色
新建一个 项目 test_role 角色
给 用户 test 分配 角色 test_role
登录 test 用户,查看效果