Jenkins与CI/CD

news2024/11/15 13:30:39

简介

CI(持续集成)

Continuous  Integration是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。

CD(持续交付)

Continuous Delivery一种软件工程方法,通过自动化构建、测试和部署过程,使软件在短时间内可靠、快速地交付给用户。

SCM(版本管理工具)

源码控制管理软件,版本控制;常用的有Git、SVN

Jenkins

概述

Jenkins一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。jenkins通常与版本管理工具(SCM)、构建工具结合使用;jenkins构建工具有Maven、Ant、Gradle。

目标

持续、自动地构建/测试软件项目;监控软件开发流程,快速问题定位及处理,提高开发效率

特性

  • 易于安装:只要把jenkins.war部署到servlet容器,不需要数据库支持。
  • 易于配置:所有配置都是通过其提供的web界面实现。
  • 集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知。
  • 生成JUnit/TestNG测试报告。
  • 分布式构建支持Jenkins能够让多台计算机一起构建/测试。
  • 文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。
  • 插件支持:支持扩展插件,你可以开发适合自己团队使用的工具。

实验(Jenkins+Maven+Gitlab+Tomcat)

准备

192.168.29.141【主机名Gitlab】——Gitlab16.0   代码管理

192.168.29.142【主机名Jenkins】——Jenkins2.401.1 + Maven3.9.2 + JDK11.0.13 + Git2.27   持续集成

192.168.29.143【主机名Tomcat】——Tomcat9.0.76 + JDK11.0.13  应用服务器

192.168.29.144【主机名Git】——Git2.27  模拟个人开发机

Gitlab主机安装Gitlab

安装脚本;GItlab安装过程参考http://t.csdn.cn/SsGdC

#!/bin/bash
yum install -y curl policycoreutils openssh-server openssh-clients
yum -y install postfix
systemctl enable --now postfix.service
curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash
EXTERNAL_URL="http://192.168.29.141:8080" yum install -y gitlab-jh
#将默认的密码文件另外保存一份
cat /etc/gitlab/initial_root_password > gitlabPWD.txt
#处理访问Gitlab时的502错误
sed -i "s/^.*puma.*8080/puma['port'] = 8989/g" /etc/gitlab/gitlab.rb
gitlab-ctl reconfigure
gitlab-ctl restart

访问http://192.168.29.141:8080;用户名:root 密码:cat gitlabPWD.txt

创建组 exampleForJenkins

创建一个项目 One

创建一个普通用户,作为开发组成员,后面Jenkins使用此用户wenzi从Gitlab拉取代码

也可使用root用户修改普通用户密码

把新用户加入到exampleForJenkins群组

邀请时设置新用户角色权限,也可先邀请后续再设置

  • Guest:访客;拥有最小的权限。可发表留言
  • Reporter:报告者;可clone代码,不能commit
  • Developer:开发者;可clone、commit、push等
  • Maintainer:维护者;可创建编辑项目、调整分支、调整项目成员等
  • Owner:所有者;拥有最大的权限;可调整所有成员权限、删除项目等

退出使用新用户wenzi登录Gitlab,查看自己是否能访问到项目

Git主机安装Git

[root@Git ~]#yum -y install git
#配置SSH秘钥
[root@Git ~]#ssh-keygen
[root@Git ~]#cat .ssh/id_rsa.pub

将公钥复制到Gitlab中

#克隆Gitlab项目
[root@Git ~]#git clone git@192.168.29.141:exampleforjenkins/one.git
[root@Git ~]#cd one/
[root@Git one]#ll
total 8
-rw-r--r-- 1 root root 6214 Jun 24 03:19 README.md
[root@Git one]#echo "123" >  test1.txt
[root@Git one]#git config --global user.email "邮箱@qq.com"
[root@Git one]#git config --global user.name "wenzi"
[root@Git one]#git add test1.txt 
[root@Git one]#git commit -m "This is test"
[root@Git one]#git push origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes | 277.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To 192.168.29.141:exampleforjenkins/one.git
   a55b791..0015149  main -> main

踩坑:

[root@Git one]#git push origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes | 277.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: GitLab: You are not allowed to push code to protected branches on this project.
To 192.168.29.141:exampleforjenkins/one.git
 ! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to '192.168.29.141:exampleforjenkins/one.git' 

Jenkins受保护的分支默认Developer没有权限push。

使用root登录Gitlab,进入项目——settings——Repository——Protected branches,在Allowed to push and merge中勾选Developer+Maintainer

 Tomcat主机安装Tomcat

#安装jdk11
[root@Tomcat ~]#ll
total 175796
-rw-------. 1 root root      1279 May 15 01:30 anaconda-ks.cfg
-rw-r--r--  1 root root  11677655 Jun 23 10:10 apache-tomcat-9.0.76.tar.gz
-rw-r--r--  1 root root 168329081 Jun 30 03:22 jdk-11.0.13_linux-x64_bin.tar.gz
[root@Tomcat ~]#tar -zx -f jdk-11.0.13_linux-x64_bin.tar.gz -C /usr/local/
[root@Tomcat ~]#ln -s /usr/local/jdk-11.0.13/ /usr/local/java
[root@Tomcat ~]#vim /etc/profile
...
#JDK11
JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
[root@Tomcat ~]#source /etc/profile
[root@Tomcat ~]#java --version 
java 11.0.13 2021-10-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.13+10-LTS-370)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.13+10-LTS-370, mixed mode)

#安装Tomca
[root@Tomcat ~]#tar -zx -f apache-tomcat-9.0.76.tar.gz -C /usr/local/
[root@Tomcat ~]#ln -s /usr/local/apache-tomcat-9.0.76/ /usr/local/tomcat
[root@Tomcat ~]#vim /etc/profile
...
#Tomcat
export CATALINA_HOME=/usr/local/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
[root@Tomcat ~]#source /etc/profile
[root@Tomcat ~]#version.sh 
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/java
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:   
NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Server version: Apache Tomcat/9.0.76
Server built:   Jun 5 2023 07:17:04 UTC
Server number:  9.0.76.0
OS Name:        Linux
OS Version:     4.18.0-193.el8.x86_64
Architecture:   amd64
JVM Version:    11.0.13+10-LTS-370
JVM Vendor:     Oracle Corporation

Jenkins主机安装Jenkins

配置Jenkins

官方文档Redhat Jenkins Packages

2.357(2022年6月)及更新的Java 11或Java 17

2.164(2019年2月)及更新的Java 8或Java 11

2.54(2017年4月)及更新的Java 8

1.612(2015年5月)及更新的Java 7

Jenkins默认端口8080;默认密码存储在 /var/lib/jenkins/secrets/initialAdminPassword

[root@Jenkins ~]#wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@Jenkins ~]#rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
[root@Jenkins ~]#yum -y install fontconfig java-11-openjdk
[root@Jenkins ~]#yum -y install jenkins
[root@Jenkins ~]#systemctl enable --now jenkins.service
[root@Jenkins ~]#systemctl status jenkins.service 
● jenkins.service - Jenkins Continuous Integration Server
   Loaded: loaded (/usr/lib/systemd/system/jenkins.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2023-06-23 11:35:03 CST; 41s ago
 Main PID: 11433 (java)
    Tasks: 42 (limit: 4840)
   Memory: 340.7M
   CGroup: /system.slice/jenkins.service
           └─11433 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080

Jun 23 11:34:37 Jenkins jenkins[11433]: Jenkins initial setup is required. An admin user has been created and a password generated.
Jun 23 11:34:37 Jenkins jenkins[11433]: Please use the following password to proceed to installation:
Jun 23 11:34:37 Jenkins jenkins[11433]: 59753a60d30d415f9289bcce37d6430e
Jun 23 11:34:37 Jenkins jenkins[11433]: This may also be found at: /var/lib/jenkins/secrets/initialAdminPassword
Jun 23 11:34:37 Jenkins jenkins[11433]: *************************************************************
Jun 23 11:35:03 Jenkins jenkins[11433]: 2023-06-23 03:35:03.870+0000 [id=29]        INFO        jenkins.InitReactorRunner$1#onAttained: Completed initialization
Jun 23 11:35:03 Jenkins jenkins[11433]: 2023-06-23 03:35:03.941+0000 [id=22]        INFO        hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running
Jun 23 11:35:03 Jenkins systemd[1]: Started Jenkins Continuous Integration Server.
Jun 23 11:35:08 Jenkins jenkins[11433]: 2023-06-23 03:35:08.949+0000 [id=44]        INFO        h.m.DownloadService$Downloadable#load: Obtained the updated data file for >
Jun 23 11:35:08 Jenkins jenkins[11433]: 2023-06-23 03:35:08.949+0000 [id=44]        INFO        hudson.util.Retrier#start: Performed the action check updates server succe>
#查看Jenkins默认密码
[root@Jenkins ~]#cat /var/lib/jenkins/secrets/initialAdminPassword

访问http://192.168.29.142:8080

根据提示设置管理员

Jenkins URL

配置Git

因为Jenkins需要从Gitlab拉取镜像

[root@Jenkins ~]#yum -y install git
[root@Jenkins ~]#which git
/usr/bin/git

配置Maven

可从阿里云镜像站下载 apache-maven-maven-3-3.9.2-binaries安装包下载_开源镜像站-阿里云

[root@Jenkins ~]#ll
total 9040
-rw-------. 1 root root    1279 May 15 01:30 anaconda-ks.cfg
-rw-r--r--  1 root root 9248920 Jun 23 14:36 apache-maven-3.9.2-bin.tar.gz
[root@Jenkins ~]#tar -zx -f apache-maven-3.9.2-bin.tar.gz -C /usr/local/
[root@Jenkins ~]#ln -s /usr/local/apache-maven-3.9.2/ /usr/local/maven
[root@Jenkins ~]#ll /usr/local/maven/
total 36
drwxr-xr-x 2 root root    97 Jun 23 14:37 bin
drwxr-xr-x 2 root root    76 Jun 23 14:37 boot
drwxr-xr-x 3 root root    63 May  8 17:04 conf
drwxr-xr-x 4 root root  4096 Jun 23 14:37 lib
-rw-r--r-- 1 root root 18652 May  8 17:04 LICENSE
-rw-r--r-- 1 root root  5036 May  8 17:04 NOTICE
-rw-r--r-- 1 root root  2533 May  8 17:04 README.txt

#配置环境变量
[root@Jenkins ~]#vim /etc/profile
...
#maven
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
[root@Jenkins ~]#source /etc/profile
[root@Jenkins ~]#mvn --version
Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)
Maven home: /usr/local/maven
Java version: 11.0.13, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.18.0-193.el8.x86_64", arch: "amd64", family: "unix"

Jenkins插件管理

不可操作的行是已经升级,等待重启的。灰暗但可以选择的行是正在升级或升级失败的。

本地语言包

Jenkins根据浏览器的语言显示文本。它可以检测internet浏览器的语言。

请注意,根据浏览器和语言的不同,您可能需要下载插件。

您还可以通过使用Locale插件更改系统语言(在执行构建时使用)以及所有用户的用户界面语言。

在【安装推荐的插件】步骤时,自动安装了中文语言包

也可以自己再次安装Locale插件,选择 install without restart

Credentials相关

凭据相关插件,在【安装推荐的插件】步骤时,已自动安装

Role-based Authorization Strategy

使用基于角色的策略,启用用户授权,角色可全局定义 。Jenkins Role-based Authorization Strategy基于角色的访问权限控制_运维@小兵的博客-CSDN博客

Git client

为Jenkins插件提供Git接口。fetch, checkout, branch, list, merge, tag

GitClient接口为git访问提供了主要入口点。它支持使用HTTP和HTTPS协议访问git存储库的用户名/密码凭证(例如,https://github.com/jenkinsci/git-client-plugin或https://git.example.com/your-repo.git)。它支持使用SSH协议访问git存储库的私钥凭证(例如,git@github.com:jenkinsci/git-client-plugin.git或SSH://git@github.com/jenkinsci/git-client-plugin.git)。凭证支持是由Jenkins Credentials Plugin提供的。

Git

为Jenkins项目提供基本的Git操作。poll, fetch, checkout, branch, list, merge, tag, push

Gitlab

允许Gitlab触发Jenkins构建并在Gitlab UI中显示

Gitlab API

为其它插件提供Gitlab API

Maven Integration

Jenkins利用Maven编译打包所需插件

Deploy to container

项目构建后可选择Deploy war/ear to a container自动化将生成的war部署到Tomcat容器;

Publish Over SSH

项目构建后可选择Send build artifacts over SSH将编译好的war/jar文件上传到远程linux指定的目录下,在远程执行脚本将拷贝的文件复制到tomcat的webapps文件夹下,重启tomact。

系统配置

tools工具

同时修改maven配置文件 /usr/local/maven/conf/settings.xml 中的maven本地仓库位置和maven下载jar包的源;Jenkins主机创建maven本地仓库目录 /jenkins/maven/repo

 

JDK,若配置有多个JDK,继续新增JDK。不勾选自动安装。按照官方安装步骤,在安装Jenkins时安装了JDK11,家目录位于/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64

[root@Jenkins ~]#vim /etc/profile
...
#JDK11
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64

Maven

[root@Jenkins ~]#vim /etc/profile
...
#JDK11
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-4.el8_5.x86_64

#MAVEN
export MAVEN_HOME=/usr/local/maven/
export PATH=$PATH:$MAVEN_HOME/bin

Git

credential凭据

用来存储第三方应用的Gitlab、GitHub、Docker等的密码、秘钥、证书等,以便和其交互

Jenkins凭证/凭据管理详解_jenkins 凭据_运维@小兵的博客-CSDN博客

Jenkins主机创建秘钥,将公钥配置到Gitlab中,将私钥配置到Jenkins中

Gitlab配置公钥

Jenkins配置私钥 

使用 SSH username with private key

给Jenkins指定项目地址

若出现红字报错

Failed to connect to repository : Command "git ls-remote -h git@xxx.git HEAD" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rightsand the repository exists.

设置如下

若还不行,可尝试登录Jenkins主机,切换到Jenkins用户,使用Jenkins用户生成秘钥,将公钥配置到Gitlab中。

​​​​

Jenkins存放秘钥位置: /var/lib/jenkins/.ssh

#将秘钥复制到Jenkins下
[root@Jenkins ~]#cd /var/lib/jenkins/.ssh/
[root@Jenkins .ssh]#cp /root/.ssh/id_rsa ./
[root@Jenkins .ssh]#chown jenkins:jenkins id_rsa 
[root@Jenkins .ssh]#ll
total 8
-rw------- 1 jenkins jenkins 2602 Jul  1 13:15 id_rsa
-rw-r--r-- 1 jenkins jenkins  176 Jun 30 07:09 known_hosts

#将公钥传送至Tomcat
[root@Jenkins ~]#ssh-copy-id -i .ssh/id_rsa.pub root@192.168.29.143
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
The authenticity of host '192.168.29.143 (192.168.29.143)' can't be established.
ECDSA key fingerprint is SHA256:xSb6S5d6vUXcMbChlCKJyoCAQHH1hqHuH+tm+pV1Elk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.29.143's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.29.143'"
and check to make sure that only the key(s) you wanted were added.

最终测试

重建Gitlab项目,文件https://github.com/bingyue/easy-springmvc-maven

在控制台输出中可以看到详细信息 

构建成功,验证各个文件

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Debian 环境使用 docker compose 部署 sentry

Debian 环境使用 docker compose 部署 sentry Sentry 简介什么是 Sentry ?Sentry 开发语言及支持的 SDKSentry 功能架构 前置准备条件规格配置说明Dcoker Desktop 安装WSL2/Debian11 环境准备 Sentry 安装步骤docker 部署 sentry 步骤演示过程说明 总结 Sentry 简介…

python机器学习在气象模式订正、短临预报、气候预测等场景的应用

基于机器学习的天河机场物流预测研究 全球经济快速增长的形势下,八大区域性枢纽之一的武汉天河机场的物流需求也在攀升。文章针对天河机场的货邮吞吐量,运用机器学习中的线性回归模型通过Python对其进行需求预测,并用二次指数平滑法与之对比,在平均绝对百分误差比较下得出机器…

需求分析引言:架构漫谈(四)性能专题

前文介绍了非功能性需求里的可靠性和可用性, 本文对非功能性需求里的性能,进行一些详细的说明,和如何度量系统的性能问题。 1、概念 性能通常是指一个软件系统的处理能力和速度,一般通过 延迟 和 吞吐量 这两个指标进行度量。 不…

分布式软件架构——域名解析系统

透明多级分流系统的设计原则 用户在使用信息系统的过程中,请求首先是从浏览器出发,在DNS的指引下找到系统的入口,然后经过了网关、负载均衡器、缓存、服务集群等一系列设施,最后接触到了系统末端存储于数据库服务器中的信息&…

云计算——容器

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.容器简介 二.主流容器技术 1.docker (1)容器的组…

HTML5+ Runtime提示

使用的环境 vue-cli框架,Andriod调试、云打包都会出现该弹框 1.我遇到的问题 上述弹框提示,HBuilderX3.8.2 , 手机SDK版本是3.8.4,不匹配 解决目的:需要让两个版本匹配 2. 点击“查看详情”,查看原因 …

JS文件UTF8格式乱码问题

UTF8格式的JS文件在IE中显示乱码问题的解决 这种情况通常是由于JS文件头缺少BOM标志引起的,解决方式: 方法1:用系统自带记事本,另存为 UTF-8,覆盖原文件,会自动加上BOM标志(就是文件开头的EF BB BF 三个字节) 方法2: 用notepad 打开,编码菜单,由UTF8编码改为 UTF8-BOM编码

10-Vue从入门到手撕

什么时候可以开始学习Vue? 学习路线:H5 CSS3 ---> ES6 ---> 网络 ---> 第三方库 ---> 工程化 ---> Vue 不经过前面的铺垫是无法学习vue的,就算学了还得倒回去补知识点 展现Vue Vue源码分析,走进作者的内心世界 …

记录一次对STM32G4串口硬件FIFO的调试

记录一次对STM32G4串口硬件FIFO的调试 前言:通常我们使用串口接收多字节数据会使用中断和DMA两种方式。使用中断方式,每接收到一个字节就会触发一次中断,我们可以在中断函数里将接收到的这一字节保存在内存中然后等待其他程序处理&#xff0c…

麦语言是什么东东?怎么学?

麦语言(M Language)是一种用于处理数据的编程语言,最初由微软公司开发。它是Power Query(数据提取和转换工具)和Power BI(商业智能工具)中的一部分。麦语言支持对各种数据源进行查询、转换和清理…

农业温室大棚数据监控系统的设计与实现

1.引言 农业温室大棚作为现在农业发展的必要条件,将高新技术融入农业温室大棚也愈发的重要,对农业温室大棚数据的监控,将温室大棚智能化。本设计对温室大棚实现远程数据监控,自动化控制,对温室内的环境数据进行巡回检…

解决Springboot在启动时报错:不支持发行版本17

今天在创建新项目时控制台出现如下错误: 最后经过排查发现问题出现如下几点。将以下几点进行修改问题得以解决。 1.将红色箭头地方由17改为11 2.将maven的pom文件中 的javaversion由17改为113.将spingboot的版本调为2.7.5 如果以上还没有解决问题,可以尝…

机器视觉(图像处理)入门金典之图像数字化及处理方法

图像的数字化 一般的图像(模拟图像)不能直接用计算机来处理,必须首先转化为数字图像 把模拟图像分割成一个个称为像素的小区域,每个像素的亮度或灰度值用一个整数表示 数字化的含义: 使模拟图像的灰度、亮度和色彩数据化 图像数字化的步骤: 两个步骤: 1、在空间坐标…

时间序列分解 | Matlab改进的自适应噪声完备集合经验模态分解ICEEMDAN

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab改进的自适应噪声完备集合经验模态分解ICEEMDAN 部分源码 %--------------------

【百日冲大厂】第十九篇,牛客网选择题+编程题汽水瓶+ 查找两个字符串a,b中的最长公共子串(动态规划问题)

前言: 大家好,我是良辰丫,第十九篇,牛客网选择题编程题汽水瓶 查找两个字符串a,b中的最长公共子串(动态规划问题).💞💞💞生活就像一只盲盒,藏着意想不到的辛苦,当然也有万般惊喜的可…

【自动化测试】——Selenium (基于java)

前言 小亭子正在努力的学习编程,接下来将开启软件测试的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 目录 一、认识Selenium 1.什么是自动化测…

原码的表示

原码表示 定点整数源码与定点小数源码 源码表示例题 正数与负数转换直接将高位变为1即可 原码的性质 原码的优缺点 乘除法直接符号位异或,数值相乘除即可加法与减法需要先判断两个数值的大小然后确定符号位

软件开发项目延期就天天加班,你认为有效吗?

目录 一、软件开发项目延期的因素 1.1 客户需求变更 1.2 开发人员变动 1.3 技术瓶颈 1.4 对外沟通问题 二、相应的解决方案 2.1 需求变更管理机制 2.2 公司内部人员培训和团队建设 2.3 技术难题攻关 2.4 优化沟通流程 三、总结 软件开发项目延期时加班并不是一个长期…

C++之std::forward模板函数用法(一百四十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

2023.7.2-逆向显示键入的整数

功能&#xff1a;输入一个整数(多位)&#xff0c;逆向显示输入的结果。 程序&#xff1a; int main() {int a;printf("请输入一个整数&#xff1a;");scanf("%d",&a);if (a < 0)printf("请输入一个正整数");else{while (a>0){printf…