Jenkins 安装构建


一、CentOS 安装


1. 使用该存储库

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key  

2. 安装 Java

yum install fontconfig java-11-openjdk
  • 配置环境变量
vim /etc/profile
`
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64
export PATH=$JAVA_HOME/bin:$PATH
`
source /etc/profile

3. 安装 Jenkins

  1. 直接安装
yum install jenkins

  1. 手动安装
# 下载地址 https://jenkins.io/zh/download/
# 下载文件 jenkins-2.190.3-1.1.noarch.rpm
# 进行安装
rpm -ivh jenkins-2.190.3-1.1.noarch.rpm

4. 卸载 Jenkins

yum remove jenkins

rm -rf /etc/sysconfig/jenkins.rpmsave
rm -rf /var/cache/jenkins/
rm -rf /etc/init.d/jenkins.rpmsave

5. 启动 Jenkins

systemctl status jenkins.service 或 journalctl -xe
systemctl start jenkins.service
systemctl stop jenkins.service
systemctl restart jenkins.service
# 重新加载
systemctl daemon-reload
systemctl enable jenkins

  • 修改 Jenkins 配置
vim /etc/syscofig/jenkins
`
JENKINS_USER="root"
JENKINS_PORT="8888"
`
vim /usr/lib/systemd/system/jenkins.service
`
Environment="JENKINS_PORT=8888"
`
  • http://127.0.0.1:8888
  • /var/lib/jenkins/secrets/initialAdminPassword
  • http://127.0.0.1:8888/restart 重启

  • 启动报错
[root@qs ~]# systemctl start jenkins.service
Job for jenkins.service failed because the control process exited with error code.
See "systemctl status jenkins.service" and "journalctl -xe" for details.

[root@qs ~]# systemctl status jenkins.service
● jenkins.service - Jenkins Continuous Integration Server
   Loaded: loaded (/usr/lib/systemd/system/jenkins.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Thu 2023-07-20 14:28:03 CST; 3s ago
  Process: 418710 ExecStart=/usr/bin/jenkins (code=exited, status=1/FAILURE)
 Main PID: 418710 (code=exited, status=1/FAILURE)

720 14:28:03 renyun systemd[1]: jenkins.service: Service RestartSec=100ms expired, scheduling restart.
720 14:28:03 renyun systemd[1]: jenkins.service: Scheduled restart job, restart counter is at 5.
720 14:28:03 renyun systemd[1]: Stopped Jenkins Continuous Integration Server.
720 14:28:03 renyun systemd[1]: jenkins.service: Start request repeated too quickly.
720 14:28:03 renyun systemd[1]: jenkins.service: Failed with result 'exit-code'.
720 14:28:03 renyun systemd[1]: Failed to start Jenkins Continuous Integration Server.
[root@qs ~]# journalctl -xe
-- Support: https://access.redhat.com/support
-- 
-- jenkins.service 单元已结束停止操作。
720 14:36:35 renyun systemd[1]: jenkins.service: Start request repeated too quickly.
720 14:36:35 renyun systemd[1]: jenkins.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
-- 
-- The unit jenkins.service has entered the 'failed' state with result 'exit-code'.
720 14:36:35 renyun systemd[1]: Failed to start Jenkins Continuous Integration Server.
-- Subject: jenkins.service 单元已失败
-- Defined-By: systemd
-- Support: https://access.redhat.com/support
-- 
-- jenkins.service 单元已失败。
-- 
-- 结果为“failed”。
lines 3456-3473/3473 (END)

6. Jenkins 启动报错


1. Jdk 版本

vim /etc/init.d/jenkins
echo $JAVA_HOME

candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/bin/java
/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64/bin/java
"

2. 用户名

vim /etc/sysconfig/jenkins
`
# 如果是 jenkins 或者其它,要改成 root
JENKINS_USER="root"
`
vim /usr/lib/systemd/system/jenkins.service
`
User=root
Group=root
`
systemctl daemon-reload
systemctl start jenkins.service
systemctl status jenkins.service

3. log 权限

cd /var/log

chmod 777 -R jenkins/

4. 启动方法问题

cp /etc/rc.d/init.d/functions /etc/init.d/

cd /etc/init.d/

./jenkins status
./jenkins stop
./jenkins start

5. 无法使用 systemctl 启动 jenkins

  • 原因是因为 systemctl 启动时调用的 jenkins.service 文件在 /usr/lib/systemd/system 目录下,无法调用 /etc/init.d/ 下的 jenkins。
  • 所以如果遇到服务方式无法启动 jenkins,则需要修改 jenkins.service 来进行适配。
vim /usr/lib/systemd/system/jenkins.service
`
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64"
`
systemctl daemon-reload
systemctl start jenkins.service
systemctl status jenkins.service

6. 端口占用

  • 修改前 kill 所有 jenkins 进程
netstat -ntap | grep 8086

# 老版本
cat /etc/sysconfig/jenkins
JENKINS_PORT="8086"
# 新版本
cat /usr/lib/systemd/system/jenkins.service
Environment="JENKINS_PORT=8086"

systemctl daemon-reload
systemctl start jenkins.service
systemctl status jenkins.service

二、Jenkins 插件


1. 替换国内插件地址

cd /var/lib/jenkins/updates
grep -oi "www.google.com" default.json

sed -i 's/http:\/\/updates.jenkinsci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
  • Dashboard > Manage Jenkins > Plugins > Advanced settings
  • 把 Update Site 改为国内插件下载地址:
  1. 原 https://updates.jenkins.io/update-center.json
  2. 新 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

2. Chinese 中文


3. Role-based Authorization Strategy 管理用户权限


1. 选择授权策略

  • Dashboard > Manage Jenkins > Security
    在这里插入图片描述

2. 创建角色

  • Dashboard > Manage Jenkins > Manage and Assign Roles > Manage Roles
    在这里插入图片描述
  • Global roles:全局角色
  • Item roles:项目角色
  1. dev.*:正则表达式匹配 dev 开头的项目。
  2. test.*:正则表达式匹配 test 开头的项目。

3. 创建用户

  • Dashboard > Manage Jenkins > Jenkins’ own user database > 新建用户
    在这里插入图片描述

4. 分配角色

  • Dashboard > Manage Jenkins > Manage and Assign Roles > Assign Roles
    在这里插入图片描述

4. Credentials Binding 使用凭证管理功能

  1. Username with password:用户名和密码。
  2. SSH Username with private key:使用 SSH 用户和密钥。
  3. Secret file:需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构建结束后,所复制的 Secret file 就会被删除。
  4. Secret text:需要保存的一个加密的文本串,如钉钉机器人或 Github 的 api token。
  5. Certificate:通过上传证书文件的方式。

1. 创建凭证

  • Dashboard > Manage Jenkins > Credentials > System > Global credentials (unrestricted)
    在这里插入图片描述

5. Git 版本管理

# CentOS 安装 git
yum install git -y
# 安装后查看版本
git --version 

Started by user wy
# 由用户wy启动
Running as SYSTEM
# 作为SYSTEM运行
Building in workspace /var/lib/jenkins/workspace/dev
# 在workspace/var/lib/jenkins/workspace/dev中构建
The recommended git tool is: NONE
# 建议使用的git工具是:NONE
using credential 1d8dad31-e432-45b7-9aea-5482f5ab7096
# 使用凭证1d8dad31-e432-45b7-9aea-5482f5ab7096
Cloning the remote Git repository
# 克隆远程Git存储库
Cloning repository http://192.168.31.110:85/jenkins/jenkins-admin.git
# 克隆存储库http://192.168.31.110:85/jenkins/jenkins-admin.git
 > git init /var/lib/jenkins/workspace/dev # timeout=10
Fetching upstream changes from http://192.168.31.110:85/jenkins/jenkins-admin.git
# 正在从获取上游更改http://192.168.31.110:85/jenkins/jenkins-admin.git
 > git --version # timeout=10
 > git --version # 'git version 2.27.0'
using GIT_ASKPASS to set credentials gitlab-Username
# 使用GIT_ASKPASS设置凭据gitlab用户名
 > git fetch --tags --force --progress -- http://192.168.31.110:85/jenkins/jenkins-admin.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url http://192.168.31.110:85/jenkins/jenkins-admin.git # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
# 避免第二次提取
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision 7ad80d4a04677aa88db3cc47f1f41d7538085658 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 7ad80d4a04677aa88db3cc47f1f41d7538085658 # timeout=10
Commit message: "初始化"
# 交消息
First time build. Skipping changelog.
# 首次构建。正在跳过更改日志。
Finished: SUCCESS
# 完成:成功

1. 配置 SSH

ssh-keygen -t rsa

# 在 /root/.ssh/ 目录生成了 私钥 和 公钥
id_rsa		# 私钥文件
id_rsa.pub	# 公钥文件
  • 把 公钥 放在 Gitlab 中:
    以 root 账户登录 > 点击头像 > Settings > SSH Keys
  • 在 Jenkins 中配置私钥:
    添加一个新的凭证,类型为"SSH Username with private key"。

6. Deploy to container 部署

  • 添加 Tomcat 用户凭证
  • Dashboard > Manage Jenkins > Credentials > System > Global credentials (unrestricted)
    在这里插入图片描述

7. Maven Integration 构建 Maven 项目


8. Pipeline 流水线构建


9. Gitlab Hook 和 GitLab 通过 Gitlab 触发


10. SonarQube Scanner 代码审查


11. Publish Over SSH 实现远程发送 Shell 命令

  • 添加远程服务器 Dashboard > Manage Jenkins > System > Publish over SSH
    在这里插入图片描述

12. NodeJS 前端打包


13. Extended Choice Parameter 多选框


14. Kubernetes 和 Kubernetes Continuous Deploy


三、Jenkins 工具


1. JDK

  • Dashboard > Manage Jenkins > Tools > JDK 安装
    在这里插入图片描述

2. Maven


1. 安装 Maven

# 解压
tar -xzf apache-maven-3.6.2-bin.tar.gz
# 创建目录
mkdir -p /opt/maven
# 移动文件
mv apache-maven-3.6.2/* /opt/maven

vi /etc/profile
`
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export MAVEN_HOME=/opt/maven export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
`
# 配置生效
source /etc/profile
# 查找 Maven 版本
mvn -v
<localRepository>/root/repo</localRepository>

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	<mirrorOf>central</mirrorOf>
</mirror>

2. 配置 Maven

  • Dashboard > Manage Jenkins > Tools > Maven > Maven 安装
    在这里插入图片描述

3. Tomcat


1. 安装 Tomcat

# 安装JDK
yum install java-1.8.0-openjdk* -y
# 解压
tar -xzf apache-tomcat-8.5.47.tar.gz
# 创建目录
mkdir -p /opt/tomcat
# 移动文件
mv /root/apache-tomcat-8.5.47/* /opt/tomcat
# 启动 tomcat
/opt/tomcat/bin/startup.sh

2. 配置 Tomcat 用户角色权限

  • http://127.0.0.1:8080/在这里插入图片描述

  • 用户及权限 /opt/tomcat/conf/tomcat-users.xml
  1. 用户名:tomcat
  2. 密码:tomcat
<tomcat-users>
	<role rolename="tomcat"/> 
	<role rolename="role1"/> 
	<role rolename="manager-script"/> 
	<role rolename="manager-gui"/> 
	<role rolename="manager-status"/> 
	<role rolename="admin-gui"/> 
	<role rolename="admin-script"/> 
	<user username="tomcat" password="tomcat" roles="manager-gui,manager-script,tomcat,admin-gui,admin-script"/>
</tomcat-users>

  • 注释这行配置 /opt/tomcat/webapps/manager/META-INF/context.xml
<!--
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->

  • 重启
# 停止
/opt/tomcat/bin/shutdown.sh

# 启动
/opt/tomcat/bin/startup.sh

  • 访问 http://127.0.0.1:8888/manager/html
    在这里插入图片描述

4. NodeJS

  • Dashboard > Manage Jenkins > Tools > NodeJS 安装
    在这里插入图片描述

yum install epel-release

npm install -g yarn

四、Jenkins 全局属性


1. JAVA_HOME

2. M2_HOME

3. PATH+EXTRA

  • Dashboard > Manage Jenkins > System > Environment variables
  1. JAVA_HOME
  2. M2_HOME
  3. PATH+EXTRA
    在这里插入图片描述

五、Jenkins 项目构建

  • Jenkins 中自动构建项目的类型有很多,常用的有以下三种:
  1. 自由风格软件项目(FreeStyle Project)
  2. Maven 项目(Maven Project)
  3. 流水线项目(Pipeline Project)
  • 每种类型的构建其实都可以完成一样的构建过程与结果,只是在操作方式、灵活度等方面有所区别。
  • 在实际开发中可以根据自己的需求和习惯来选择。
  • 个人推荐使用流水线类型,因为灵活度非常高。

1. 自由风格项目构建


1. 新建项目

  • Dashboard > All
    在这里插入图片描述

2. 配置源码管理(Git 插件)

  • Dashboard > dev > Configuration > 源码管理在这里插入图片描述

3. 添加构建步骤

  • Dashboard > dev > Configuration > Build Steps
    在这里插入图片描述
  • Execute shell
    在这里插入图片描述
echo "开始编译和打包" 
mvn clean package 
echo "编译和打包结束"

4. 添加构建后操作

  • Dashboard > dev > Configuration > 构建后操作在这里插入图片描述

1. 构建 War 项目(Deploy to container 插件)
  • Deploy war/ear to a container(Deploy to container 插件)在这里插入图片描述
  1. WAR/EAR files:target/*.war 正则匹配 target 目录
  2. Tomcat 8.x Remote:配置 Tomcat 工具
  1. Credentials:凭证
  2. Tomcat URL:部署

2. 构建 Jar 项目(Publish Over SSH 插件)
  • Send build artifacts over SSH(Publish Over SSH 插件)
    在这里插入图片描述
  1. SSH Server:远程服务器
  2. Source files:target/*.jar 正则匹配 target 目录
  3. Remove prefix:移除 target/ 前缀
  4. Exec command:执行的命令

echo "开始部署"
source /etc/profile
cd /root/TOOL
echo 最新构建时间 $(date) >> build.log
echo $(date +%Y%m%d) >> build_time.log
sh start.sh
echo "结束部署" 
#!/bin/bash
set -e
# 远程服务器地址
SERVER_ADDRESS="192.168.1.100"
# 远程服务器登录用户名
USERNAME="your_ssh_username"
# 远程服务器登录密码
PASSWORD="your_ssh_password"
# 远程服务器 JAR 包部署路径
REMOTE_PATH="/opt/myapp/"
# 本地 JAR 包路径
LOCAL_PATH="target/myapp.jar"

# 将 JAR 包复制到远程服务器
echo "Copying JAR file to remote server..."
sshpass -p ${PASSWORD} scp -o StrictHostKeyChecking=no ${LOCAL_PATH} ${USERNAME}@${SERVER_ADDRESS}:${REMOTE_PATH}

# 启动远程服务器上的应用
echo "Starting application on remote server..."
sshpass -p ${PASSWORD} ssh -o StrictHostKeyChecking=no ${USERNAME}@${SERVER_ADDRESS} "cd ${REMOTE_PATH} && java -jar myapp.jar"

2. Maven 项目构建(Maven Integration 插件)


1. 新增项目

  • Dashboard > All(Maven Integration 插件)在这里插入图片描述

2. 构建

  • Dashboard > demo_maven > Configuration > Build在这里插入图片描述
  1. Root POM:指定 pom.xml 文件的路径
  2. Goals and options:输入 Maven 命令(注意不用写 mvn)

3. Pipeline 流水线项目构建(Pipeline 插件)

  • 概念:Pipeline 简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于 单个 或者 多个 节点的任务连接起来,实现 单个 任务难以完成的 复杂流程编排 和 可视化 的工作。

  • 使用 Pipeline 有以下好处(来自官方文档):
  1. 代码:Pipeline 以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查 和 迭代 其传送流程。
  2. 持久:无论是计划内的还是计划外的服务器重启,Pipeline 都是可恢复的。
  3. 可停止:Pipeline 可接收交互式输入,以确定是否继续执行 Pipeline。
  4. 多功能:Pipeline 支持现实世界中复杂的持续交付要求。它支持 fork/join、循环执行,并行执行任务的功能。
  5. 可扩展:Pipeline 插件支持其 DSL 的自定义扩展 ,以及与其他插件集成的多个选项。

  • 如何创建 Jenkins Pipeline 呢?
  1. Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy。
  2. Pipeline 支持两种语法:
  1. Declarative(声明式语法)。
  2. Scripted Pipeline(脚本式语法)。
  1. Pipeline 也有两种创建方法:
  1. 可以直接在 Jenkins 的 Web UI 界面中输入脚本。
  2. 也可以通过创建一个 Jenkinsfile 脚本文件放入项目源码库中。
    一般我们都推荐在 Jenkins 中直接从源代码控制(SCM),中直接载入 Jenkinsfile Pipeline 这种方法。

1. 新建项目

  • Dashboard > All(Pipeline 插件)
    在这里插入图片描述

2. 流水线

  • Dashboard > demo_pipeline > Configuration > 流水线
  • Pipeline script > Hello World
pipeline {
    agent any
    
	/*
	stages:代表整个流水线的所有执行阶段。
	通常 stages 只有1个,里面包含多个 stage。
	*/
    stages {
    	/*
    	stage:代表流水线中的某个阶段,可能出现 n 个。
    	一般分为 拉取代码,编译构建,部署 等阶段。
    	*/
        stage('Hello') {
        	/*
        	steps:代表一个阶段内需要执行的逻辑。
        	steps 里面是 shell 脚本,git 拉取代码,ssh 远程发布 等任意内容。
        	*/
            steps {
                echo 'Hello World'
            }
        }
    }
}

1. Pipeline script 界面编写脚本

1. Declarative 声明式 Pipeline
  • Pipeline script > Hello World
pipeline {
	agent any 

	stages {
		stage('拉取代码') {
			steps {
				echo '拉取代码'
			}
		}
		stage('编译构建') {
			steps {
				echo '编译构建'
			}
		}
		stage('项目部署') {
			steps {
				echo '项目部署'
			}
		}
	}
	
}

  • Dashboard > demo_pipeline > #3 > 流水线步骤
  • 显示没步的耗时。
    在这里插入图片描述

2. Scripted Pipeline 脚本式 Pipeline
  • Pipeline script > Scripted Pipeline
node {
	def mvnHome 
	
	stage('拉取代码') { // for display purposes 
		echo '拉取代码'
	}
	stage('编译构建') {
		echo '编译构建'
	}
	stage('项目部署') {
		echo '项目部署'
	}
}

3. 拉取代码
  • Dashboard > demo_pipeline > 流水线语法
  • checkout: Check out from version control
    在这里插入图片描述
  1. War
checkout scmGit(branches: [
	[name: '*/master']
], extensions: [], userRemoteConfigs: [
	[credentialsId: '7b1fce0d-30ea-4351-badc-5fa8751c2c06', url: 'git@192.168.31.110:jenkins/jenkins-admin.git']
])

  1. Jar
checkout scmGit(branches: [
	[name: '*/master']
], extensions: [], userRemoteConfigs: [
	[credentialsId: '7b1fce0d-30ea-4351-badc-5fa8751c2c06', url: 'git@192.168.31.110:jenkins/jenkins-jar.git']
])

  1. Web
checkout scmGit(branches: [
	[name: '*/master']
], extensions: [], userRemoteConfigs: [
	[credentialsId: '7b1fce0d-30ea-4351-badc-5fa8751c2c06', url: 'git@192.168.31.110:jenkins/jenkins-web.git']
])

4. 编译构建
  • Dashboard > demo_pipeline > 流水线语法
  • sh: Shell Script
    在这里插入图片描述

  1. War、Jar
sh 'mvn clean package'

  1. Web
sh '''yarn install
yarn build'''

5. 项目部署 War
  • Dashboard > demo_pipeline > 流水线语法
  • deploy: Deploy war/ear to a container
    在这里插入图片描述
  1. Add Container:可以配置多个容器(集群部署)。
deploy adapters: [tomcat8(credentialsId: '49532328-b2d0-4b35-b11b-069916f89d4d', path: '', url: 'http://192.168.31.17:8888/')], contextPath: null, war: 'target/*.war'

6. 项目部署 Jar
  • Dashboard > demo_pipeline > 流水线语法
  • sshPublisher: Send build artifacts over SSH
    在这里插入图片描述
sshPublisher(publishers: [
	sshPublisherDesc(configName: 'master_server', 
		transfers: [
			sshTransfer(cleanRemote: false, excludes: '', 
				execCommand: 
				'''echo "开始部署"
				source /etc/profile
				cd /root/TOOL
				echo 最新构建时间 $(date) >> build.log
				echo $(date +%Y%m%d) >> build_time.log
				sh start.sh
				echo "结束部署" ''', 
				execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, 
				removePrefix: 'target/', sourceFiles: 'target/*.jar'
			)
		], 
		usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false
	)]
)

7. 项目部署 Web
  • Dashboard > demo_pipeline > 流水线语法
  • sshPublisher: Send build artifacts over SSH
    在这里插入图片描述
sshPublisher(publishers: [
	sshPublisherDesc(configName: 'master_server', 
		transfers: [
			sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', 
				remoteDirectory: '/usr/share/nginx/html', remoteDirectorySDF: false, 
				removePrefix: 'dist', sourceFiles: 'dist/**'
			)
		], 
		usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false
	)
])

8. 完整的声明式
pipeline {
	agent any 
	
	stages {
		stage('拉取代码') {
			steps {
				checkout([$class: 'GitSCM', branches: [
					[name: '*/master']
				], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [
					[credentialsId: '7b1fce0d-30ea-4351-badc-5fa8751c2c06', url: 'git@192.168.31.110:jenkins/jenkins-admin.git']
				]])
			}
		}
		stage('编译构建') {
			steps {
				sh label: '', script: 'mvn clean package'
			}
		}
		stage('项目部署') {
			steps {
				deploy adapters: [tomcat8(credentialsId: 'afc43e5e-4a4e-4de6-984f- b1d5a254e434', path: '', url: 'http://192.168.31.17:8888')], contextPath: null, war: 'target/*.war'
			}
		}

	}
}

9. 完整的脚本式
  1. War
node {
	def mvnHome 
	
	stage('拉取代码') { // for display purposes 
		echo '拉取代码'
		checkout scmGit(branches: [
        	[name: '*/master']
        ], extensions: [], userRemoteConfigs: [
        	[credentialsId: '7b1fce0d-30ea-4351-badc-5fa8751c2c06', url: 'git@192.168.31.110:jenkins/jenkins-admin.git']
        ])
	}
	stage('编译构建') {
		echo '编译构建'
		sh 'mvn clean package'
	}
	stage('项目部署') {
		echo '项目部署'
		deploy adapters: [tomcat8(credentialsId: '49532328-b2d0-4b35-b11b-069916f89d4d', path: '', url: 'http://192.168.31.17:8888/')], contextPath: null, war: 'target/*.war'
	}
}

  1. Jar
node {
	def mvnHome 
	
	stage('拉取代码') { // for display purposes 
		echo '拉取代码'
		checkout scmGit(branches: [
        	[name: '*/master']
        ], extensions: [], userRemoteConfigs: [
        	[credentialsId: '7b1fce0d-30ea-4351-badc-5fa8751c2c06', url: 'git@192.168.31.110:jenkins/jenkins-jar.git']
        ])
	}
	stage('编译构建') {
		echo '编译构建'
		sh 'mvn clean package'
	}
	stage('项目部署') {
		echo '项目部署'
		sshPublisher(publishers: [
			sshPublisherDesc(configName: 'master_server', 
				transfers: [
					sshTransfer(cleanRemote: false, excludes: '', 
						execCommand: 
						'''echo "开始部署"
						source /etc/profile
						cd /root/TOOL
						echo 最新构建时间 $(date) >> build.log
						echo $(date +%Y%m%d) >> build_time.log
						sh start.sh
						echo "结束部署" ''', 
						execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, 
						removePrefix: 'target/', sourceFiles: 'target/*.jar'
					)
				], 
				usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false
			)]
		)
	}
}

2. Pipeline script from SCM 版本控制脚本
  • 上面直接在 Jenkins 的 UI 界面编写 Pipeline 代码,这样不方便脚本维护,建议把 Pipeline 脚本放在项目中(一起进行版本控制)。

1. 在项目根目录建立 Jenkinsfile 文件,把内容复制到该文件中
  • 把 Jenkinsfile 上传到 Gitlab在这里插入图片描述

2. 在项目中引用该文件
  • Dashboard > demo_pipeline > Configuration > 流水线
  • Pipeline script from SCM在这里插入图片描述

  • Dashboard > demo_pipeline > #5 > 流水线步骤
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/46760.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【iOS】iOS持久化

文章目录 一. 数据持久化的目的二. iOS中数据持久化方案三. 数据持有化方式的分类1. 内存缓存2. 磁盘缓存SDWebImage缓存 四. 沙盒机制的介绍五. 沙盒目录结构1. 获取应用程序的沙盒路径2. 访问沙盒目录常用C函数介绍3. 沙盒目录介绍 六. 持久化数据存储方式1. XML属性列表2. P…

Appium+python自动化(二十)- Monkey(猴子)日志(超详解)

简介 日志是非常重要的&#xff0c;用于记录系统、软件操作事件的记录文件或文件集合&#xff0c;可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统、软件的活动等重要作用&#xff0c;在开发或者测试软系统过程中出现了问题&#xff0c;我们首先想到的…

CSDN原理等级的提升方法

文章目录 原力增长是一种积分型的社交平台&#xff0c;它有多个可以增长用户积分的渠道&#xff0c;也可以升级发付费资源&#xff0c;以下是几个主要的渠道&#xff1a;1.原创文章&#xff1a;2.回答问题&#xff1a;3.发动态&#xff1a;4.浏览文章&#xff1a;5.翻译文章&am…

Rust vs Go:常用语法对比(十)

题图来自 Rust vs. Golang: Which One is Better?[1] 182. Quine program Output the source of the program. 输出程序的源代码 package mainimport "fmt"func main() { fmt.Printf("%s%c%s%c\n", s, 0x60, s, 0x60)}var s package mainimport "fm…

qt打包发布项目

目录 QT打包发布项目正常操作流程&#xff08;不包含第三方库&#xff09;包含第三方库 QT打包发布项目 qt 版本&#xff1a;5.14.2 qtcreator 版本 4.11.1 正常操作流程&#xff08;不包含第三方库&#xff09; 首先在左下角的把项目模式从常用的Debug模式改成Release模式&…

未来行星探索希望:新型多脚机器人-团队版

机器人正在探索一个模拟的外星环境 即使一个机器人失败了&#xff0c;其余的团队成员也可以抵消它的损失。 背景 虽然探测器取得了令人难以置信的发现&#xff0c;但它们的轮子可能会拖慢它们的速度&#xff0c;而不稳定的地形可能会导致损坏。虽然没有东西可以取代“毅力号”…

linux 在excel里面找内容

linux 在excel里面找内容 背景&#xff1a;在大数据行业中&#xff0c;很多数据源是excel文件&#xff0c;但是常常会出现查找excel内容找到对应的文件&#xff0c;所以制作了简单的shell脚本方便查询对应的excel文件 查看下面精简的内容即可&#xff0c;开箱即用 shell转换 …

基于Java+SpringBoot+Vue+uniapp微信小程序实现仓储管理系统

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

windos 服务器设置指定ip访问指定端口,其他ip不能访问

需求&#xff1a;设置指定ip访问指定端口&#xff0c;其他ip不能访问 一&#xff0c;禁止所有ip访问 需要打开IP安全策略 或者winR 输入secpol.msc 1.先创建一个ip安全策略 2.点击添加&#xff0c;不使用添加向导&#xff0c;建一个安全策略 继续点添加 二&#xff0c;放开需…

Echarts 柱状图显示百分比

以下是生成的 option option {yAxis: { name: 金额&#xff08;元&#xff09;, type: value },xAxis: { type: category },legend: {},series: [{stack: x,name: 早餐,label: {normal: {show: true,position: insideRight,// 格式化显示formatter: function (params) {let …

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目

LabVIEW使用自定义模板和示例项目来开发LabVIEW项目 创建项目时&#xff0c;LabVIEW将显示“创建项目”对话框&#xff0c;以帮助您选择模板或示例项目来作为开发起点。如果要使用您创建的项目作为自定义模板和示例项目&#xff0c;您必须将每个项目的源文件和元数据添加到相应…

软件外包开发的需求分析

需求分析是软件开发中的关键步骤&#xff0c;其目的是确定用户需要什么样的软件&#xff0c;以及软件应该完成哪些任务。需求分析是软件工程的早期工作&#xff0c;也是软件项目成功的基础&#xff0c;因此花费大量精力和时间去做好需求分析是值得的。今天和大家分享软件需求分…

Macbook M1编译安装Java OpenCV

OpenCV-4.8.0编辑安装 查询编译依赖 brew info opencv确保所有需要模块都打上了✔&#xff0c;未打✔的需要使用brew进行安装 下载OpenCV源码 在此处下载OpenCV源代码&#xff0c;选择Source&#xff0c;点击此处下载opencv_contrib-4.8.0 或者使用如下命令&#xff0c;通…

MultipartFile类型接收上传文件报出的UncheckedIOException以及删除tomcat临时文件失败源码探索

1、描述异常背景&#xff1a; 因为需要分析数据&#xff0c;待处理excel文件的数据行数太大&#xff0c;手动太累&#xff0c;花半小时写了一个定制的数据入库工具&#xff0c;改成了通用的&#xff0c;整个项目中的万级别数据都在工具上分析&#xff0c;写SQL进行分析&#x…

2_Apollo4BlueLite中断控制器NVIC

1.概述 Apollo4BlueLite 的中断控制器是采用 ARM Cortex-M4 内核&#xff0c;并集成了 NVIC&#xff08;Nested Vectored Interrupt Controller&#xff0c;嵌套向量中断控制器&#xff09;作为其中断控制器。 NVIC 是 ARM Cortex-M 系列处理器中常用的中断控制器&#xff0c…

算法(2)

二叉树 镜像二叉树 树轴对称 第一个节点的左子树与第二个节点的右子树同步递归对比&#xff0c;第一个节点的右子树与第二个节点的左子树同步递归比较。 二叉树序列化、反序列化 当然你也可以根据满二叉树结点位置的标号规律来序列化&#xff0c;还可以根据先序遍历和中序遍…

余切拉普拉斯算子推导 cotangent Laplace-Beltrami operator

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 参考自polygon mesh proccessing这本书 基本思路及原理 余切拉普拉斯算子是一种考虑了网格底层几何联系的一种算子&#xff0c;在网格平滑&#xff0c;参数化等算法中…

Llama 2: Open Foundation and Fine-Tuned Chat Models

文章目录 TL;DRIntroduction背景本文方案 实现方式预训练预训练数据训练细节训练硬件支持预训练碳足迹 微调SFTSFT 训练细节 RLHF人类偏好数据收集奖励模型迭代式微调&#xff08;RLHF&#xff09;拒绝采样&#xff08;Rejection Sampling&#xff09;PPO多轮一致性的系统消息&…

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B:美国纽约公共自行车使用量预测分析 问题二Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题二 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年第二届钉钉杯大学生大数据挑…

Tensorflow学习

一、处理数据的结构 案例代码如下: import tensorflow.compat.v1 as tf tf.disable_v2_behavior() import numpy as np# create data x_data np.random.rand(100).astype(np.float32) y_data x_data*0.1 0.3# 创建结构(一维结构) Weights tf.Variable(tf.random.uniform(…