Jenkins--从入门到入土

Jenkins–从入门到入土

文章目录

  • Jenkins--从入门到入土
    • 〇、概念提要--什么是CI/DI?
      • 1、CI(Continuous Integration,持续集成)
      • 2、DI(DevOps Integration,DevOps 集成)
      • 3、解决的问题
    • 一、Jenkins安装部署
      • 1、什么是Jenkins?
      • 2、Jenkins在开发过程中所属位置
      • 3、安装硬件环境和知识储备
      • 4、安装
        • 4.1、下载war启动
        • 4.2、Docker启动
        • 4.3、windows使用驱动安装
      • 5、使用插件自定义 Jenkins
      • 6、创建第一个管理员用户
    • 二、Jenkins配置
      • 1、环境配置
        • 1.1、更换站点镜像
        • 1.2、全局工具的配置
      • 2、用户权限配置
      • 3、插件介绍
    • 三、配置自动化任务--自由风格
      • 1、两种执行方法
      • 2、安装插件
      • 3、搭建GitLab
        • 3.1、从docker compose快速搭建GitLab
        • 3.2、上传到服务器
      • 4、github整合Jenkins
        • 4.1、关联github
        • 4.2、Jenkins中的github的配置
        • 4.3、新建任务
        • 4.4、立即构建
        • 4.5、Github代码更新之后触发构建
    • 四、配置自动化任务--Pipeline
      • 1、安装Blue Ocean插件
      • 2、新建Github测试项目
      • 3、编写Jenkinsfile文件
      • 4、推送到github项目中
      • 5、操作流水线Blue Ocean
      • 6、选择仓库创建流水线

温馨提示:由于本文档写的比较杂,基本讲了很多东西,所以自己根据目录筛选自己需要的部分。

〇、概念提要–什么是CI/DI?

1、CI(Continuous Integration,持续集成)

  • 定义:持续集成是一种软件开发实践,开发人员频繁地将代码更改集成到共享代码库中。每次集成都触发自动构建和测试,以尽早发现错误并提高软件质量。
  • 关键特点
    • 频繁集成:开发人员每天多次将代码提交到版本控制系统。
    • 自动化构建和测试:每次提交代码后,系统会自动构建项目并运行自动化测试。
    • 快速反馈:开发人员可以迅速知道他们的代码是否引入了错误。
    • 集成工具:常用工具包括Jenkins、Travis CI、CircleCI等。

2、DI(DevOps Integration,DevOps 集成)

  • 定义:DevOps集成是一种将开发和运维团队的工作流程、工具和文化相结合的实践,旨在提高软件开发和交付的速度和质量。
  • 关键特点
    • 自动化:通过自动化的构建、测试、部署和监控,减少手动干预,降低错误率。
    • 持续交付(CD):实现代码从开发到生产环境的自动化部署。
    • 协作:开发和运维团队紧密合作,共享责任,共同优化流程。
    • 常用工具:包括Docker、Kubernetes、Ansible、Puppet、Chef等。

3、解决的问题

CI和DI在计算机领域分别强调持续集成和DevOps实践中的集成部分,通过自动化和协作提高软件开发和交付的效率和质量。

持续的集成部署解决了很多问题,使得工作变成一种流程的形式,我们就负责编码(code)的内容,其他环节都是自动化的部署完成。

image-20240524153806030

“You build it , you run it !”

一、Jenkins安装部署

1、什么是Jenkins?

image-20240521144411533

Build great things at any scale,The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.

Jenkins官方 ,Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

Jenkins文档下载

2、Jenkins在开发过程中所属位置

主流软件开发流程:

Jenkins在Kubernetes中持续部署

3、安装硬件环境和知识储备

机器要求:

  • 256 MB 内存,建议大于 512 MB

  • 10 GB 的硬盘空间(用于 Jenkins 和 Docker 镜像)

环境要求:

  • Java8(由于Jenkins是由Java语言编写,所以需要 JRE 或者 JDK环境)
  • Docker (导航到网站顶部的Get Docker链接以访问适合您平台的Docker下载

4、安装

4.1、下载war启动
  1. 下载War包:http://mirrors.jenkins.io/war-stable/latest/jenkins.war

    mkdir -p /opt/jenkins
    wget -O /opt/jenkins/jenkins.war http://mirrors.jenkins.io/war-stable/latest/jenkins.war
    
  2. 打开终端进入到下载目录.

     cd /opt/jenkins
    
  3. 运行命令 java -jar jenkins.war --httpPort=8080.

    java -jar jenkins.war --httpPort=8080
    
  4. 打开浏览器进入链接 http://localhost:8080.

    image-20240524105733698

  5. 按照说明完成安装.

参考链接https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/

4.2、Docker启动

docker安装文档:在CentOS中安装Docker

  1. 搜索Docker镜像:

    版本选择:

    Jenkins: https://hub.docker.com/r/jenkins/jenkins/

    Jenkins with Blue Ocean: https://hub.docker.com/r/jenkinsci/blueocean

    image-20240522180452702

    使用命令:

    docker pull jenkins/jenkins#24版本的docker镜像,因为我发现存在问题,当安装依赖的时候,换个版本可以。
    docker pull  jenkins/jenkins:2.459-jdk17
    
  2. 在Docker中设置桥接网络

    docker network create jenkins
    
  3. 启动(三组命令,自行甄别)

    # 官方给出的命令
    docker run \--name jenkins-docker \--rm \--detach \--privileged \--network jenkins \--network-alias docker \--env DOCKER_TLS_CERTDIR=/certs \--volume jenkins-docker-certs:/certs/client \--volume jenkins-data:/var/jenkins_home \--publish 2376:2376 \docker:dind \--storage-driver overlay2# Jenkins
    docker run \-itd \-u root \-p 8080:8080 \-v jenkins-data:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \--name jenkins-master \jenkins/jenkins#Jenkins blueoceandocker run  \-itd  \-u root   \-p 8080:8079   \-v jenkins-data:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock  \-v /usr/bin/docker:/usr/bin/docker \--name jenkins-master \jenkinsci/blueocean# Jenkins 2.459 版本docker run  \-itd  \-u root   \-p 8080:8080   \-v jenkins-data:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock  \-v /usr/bin/docker:/usr/bin/docker \--name jenkins-master \jenkins/jenkins:2.459-jdk17
  4. 查看启动状态:

    docker ps
    

    image-20240524162358779

  5. 查看日志

    docker logs jenkins-master  
    

    后面的参数是容器的参数,重点看下面这个:

    image-20240524162519031

  6. 访问:http://192.168.200.128:2376/

参考文档:https://www.jenkins.io/doc/book/installing/docker/

4.3、windows使用驱动安装
  1. 首先下载镜像:官网

    image-20240522185553500

  2. 确保安装了Java环境,并且安装环境变量,我这里使用JDK 21演示

    image-20240522185714105

  3. Jenkins启动

    image-20240522185926936

    image-20240522190957509

    image-20240522191052458

    image-20240522191140747

    image-20240522191216798

    image-20240522191230811

    image-20240522191245707

    image-20240522191257725

    安装完成!

  4. 打开安装目录,我的在E:\Software\Jenkins,安装中有涉及,请留意。

    image-20240522191642821

  5. 打开jenkins.xml配置文件,设置Jenkins环境变量和Java环境变量

    image-20240522192012862

    换成:

    image-20240522192342863

    但是我发现配置不修改应该也是可以运行的,只是官方这样操作的,我只换了JAVA_HOME

  6. 搜索service,打开Jenkins服务。

    image-20240522193156980

    在这里插入图片描述

  7. 浏览器访问预先设置好的端口http://localhost:8079/:

    image-20240522193448151

  8. 查看管理员密码image-20240522193720322

    image-20240522193800820

5、使用插件自定义 Jenkins

解锁 Jenkins后,会出现**“自定义 Jenkins”**页面。在这里,您可以安装任意数量的有用插件作为初始设置的一部分。

单击显示的两个选项之一:

  • 安装建议的插件- 安装推荐的插件集,这些插件基于最常见的用例。
  • 选择要安装的插件- 选择最初安装的插件集。当您第一次访问插件选择页面时,默认选择建议的插件。

设置向导显示 Jenkins 的配置进度以及您选择的 Jenkins 插件安装集。此过程可能需要几分钟。

如果不确定需要什么插件,请选择安装建议的插件。您可以稍后通过 Jenkins 中的管理 Jenkins > 插件页面安装(或删除)其他 Jenkins 插件。

6、创建第一个管理员用户

最后,在使用插件自定义 Jenkins后,Jenkins 会要求您创建第一个管理员用户。

  1. 当**“创建第一个管理员用户”**页面出现时,在相应字段中指定管理员用户的详细信息,然后单击“保存并完成”
  2. Jenkins 就绪页面出现时,单击Start using Jenkins
  3. 如果需要,请使用您刚刚创建的用户凭据登录 Jenkins,然后就可以开始使用 Jenkins 了!

二、Jenkins配置

1、环境配置

1.1、更换站点镜像

具体流程:

image-20240524170556997

将升级站点的URL更换成清华镜像:

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/current/update-center.json

这样插件下载就会从镜像进行下载,相对来说下载更快。

1.2、全局工具的配置

image-20240524180523227

  • JDK:

    image-20240524180548087

  • Git:

    image-20240524180612658

还有其他环境中的工具配置。

2、用户权限配置

  • 矩阵权限的配置

  • 添加管理员用户所有的权限

  • 添加Authorize Project | Jenkins plugin)插件,并且在系统管理中进行配置。配置逻辑,就给用户当前项目的矩阵权限!

    示例:

    image-20240524180316934

3、插件介绍

  • Publish over SSH

    这个是一个远程Shell工具,可以远程去执行一些shell命令

  • HTTP Request Plugin

    跨平台调用,在构建前后可以通过该插件以http形式调用各种api接口实现和内部系统的联动

  • Publish Over FTP

    用于远程使用FTP发布,比较合适于静态资源的发布。

  • Performance Plugin

​ 该插件可以读取和解析测试框架输出的报告,并且在 Jenkins 上绘制性能和稳定性相关的图表。Performance Plugin 支持的测试框架有 JUnit、JMeter, Twitter 的 Lago 和 Taurus。

​ https://plugins.jenkins.io/performance

  • Gitlab Merge Request Builder Plugin

​ Gitlab Merge Request Builder Plugin 可以方便的自动发起代码审查,它在创建 pull request 的时候,会自动带上关联任务的运行结果,以方便代码审查着确认改动的正确性。

​ 同时,这款插件还支持自动合并,既在代码审查通过后自动合并该 pull request 内容。

​ https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin

  • JIRA Plugin

​ JIRA Plugin 可以让 Jenkins 任务和 JIRA 集成起来,这样项目管理者可以通过 JIRA 了解项目进度,开发者也可以通过该插件直接更改 JIRA 上的 issue 状态。

​ https://plugins.jenkins.io/jira

  • Kubernetes Plugin

​ 和最近大热的容器编排框架 Kubernetes 集成当然不能落下了。另外,Jenkins 对执行机的管理一直比较弱,无法做到快速的扩容和缩容。Kubernetes Plugin 通过引入 Kubernetes 的容器编排能力,让 Jenkins 执行机运行在 Kubernetes 环境中。

​ https://github.com/jenkinsci/kubernetes-plugin

  • Build Pipeline plugin

    https://github.com/jenkinsci/build-pipeline-plugin

​ 对一个系统的持续集成会包含很多个方面,如果将它们都杂糅在一个 Jenkins 任务中,会提高排查成本,也不利于整个持续集成的运作。Build Pipeline plugin 可以让项目管理员针对系统持续集成步骤设置一系列关联的任务,任务之间可以设置不同的触发条件,以确认何时需要人工介入。该插件可以让整个持续集成流程变得非常直观:

image-20240524181357541

上述内容部分参考于链接:https://www.jianshu.com/p/6bcb2853fae2

三、配置自动化任务–自由风格

1、两种执行方法

  • 配置自由风格的项目
  • 配置Pipeline使用Jenkinsfile

2、安装插件

  • 版本控制

    • github
    • gitlab

    image-20240524182419991

  • SSH

    • SSH
    • Publish Over SSH
    • SSH Agent
    • SSH Pipeline Steps

    image-20240524182126772

3、搭建GitLab

3.1、从docker compose快速搭建GitLab

这里我们使用GitLab来测试。

使用docker compose在docker环境下快速部署:

搭建docker compose环境参考文章:docker compose快速安装

学习docker compose参考文章(本篇博客不需要,只是推荐学习)DockerCompose(初识、安装、部署) Docker Compose 命令说明文档

docker-compose.yaml文件链接:https://github.com/sameersbn/docker-gitlab/blob/master/docker-compose.yml

image-20240524183353761

可以点击下载,也可以新建docker-compose.yaml文件,将内容复制粘贴。

也可以直接复制(但是建议从官网下载,可能版本会更新之类的):

version: '2.3'services:redis:restart: alwaysimage: redis:6.2command:- --loglevel warningvolumes:- redis-data:/data:Zpostgresql:restart: alwaysimage: sameersbn/postgresql:14-20230628volumes:- postgresql-data:/var/lib/postgresql:Zenvironment:- DB_USER=gitlab- DB_PASS=password- DB_NAME=gitlabhq_production- DB_EXTENSION=pg_trgm,btree_gistgitlab:restart: alwaysimage: sameersbn/gitlab:17.0.0depends_on:- redis- postgresqlports:- "10080:80"- "10022:22"volumes:- gitlab-data:/home/git/data:Zhealthcheck:test: ["CMD", "/usr/local/sbin/healthcheck"]interval: 5mtimeout: 10sretries: 3start_period: 5menvironment:- DEBUG=false- DB_ADAPTER=postgresql- DB_HOST=postgresql- DB_PORT=5432- DB_USER=gitlab- DB_PASS=password- DB_NAME=gitlabhq_production- REDIS_HOST=redis- REDIS_PORT=6379- TZ=Asia/Kolkata- GITLAB_TIMEZONE=Kolkata- GITLAB_HTTPS=false- SSL_SELF_SIGNED=false- GITLAB_HOST=- GITLAB_PORT=10080- GITLAB_SSH_PORT=10022- GITLAB_RELATIVE_URL_ROOT=- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string- GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string- GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string- GITLAB_ROOT_PASSWORD=- GITLAB_ROOT_EMAIL=- GITLAB_NOTIFY_ON_BROKEN_BUILDS=true- GITLAB_NOTIFY_PUSHER=false- GITLAB_EMAIL=notifications@example.com- GITLAB_EMAIL_REPLY_TO=noreply@example.com- GITLAB_INCOMING_EMAIL_ADDRESS=reply@example.com- GITLAB_BACKUP_SCHEDULE=daily- GITLAB_BACKUP_TIME=01:00- SMTP_ENABLED=false- SMTP_DOMAIN=www.example.com- SMTP_HOST=smtp.gmail.com- SMTP_PORT=587- SMTP_USER=mailer@example.com- SMTP_PASS=password- SMTP_STARTTLS=true- SMTP_AUTHENTICATION=login- IMAP_ENABLED=false- IMAP_HOST=imap.gmail.com- IMAP_PORT=993- IMAP_USER=mailer@example.com- IMAP_PASS=password- IMAP_SSL=true- IMAP_STARTTLS=false- OAUTH_ENABLED=false- OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=- OAUTH_ALLOW_SSO=- OAUTH_BLOCK_AUTO_CREATED_USERS=true- OAUTH_AUTO_LINK_LDAP_USER=false- OAUTH_AUTO_LINK_SAML_USER=false- OAUTH_EXTERNAL_PROVIDERS=- OAUTH_CAS3_LABEL=cas3- OAUTH_CAS3_SERVER=- OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false- OAUTH_CAS3_LOGIN_URL=/cas/login- OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate- OAUTH_CAS3_LOGOUT_URL=/cas/logout- OAUTH_GOOGLE_API_KEY=- OAUTH_GOOGLE_APP_SECRET=- OAUTH_GOOGLE_RESTRICT_DOMAIN=- OAUTH_FACEBOOK_API_KEY=- OAUTH_FACEBOOK_APP_SECRET=- OAUTH_TWITTER_API_KEY=- OAUTH_TWITTER_APP_SECRET=- OAUTH_GITHUB_API_KEY=- OAUTH_GITHUB_APP_SECRET=- OAUTH_GITHUB_URL=- OAUTH_GITHUB_VERIFY_SSL=- OAUTH_GITLAB_API_KEY=- OAUTH_GITLAB_APP_SECRET=- OAUTH_BITBUCKET_API_KEY=- OAUTH_BITBUCKET_APP_SECRET=- OAUTH_BITBUCKET_URL=- OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=- OAUTH_SAML_IDP_CERT_FINGERPRINT=- OAUTH_SAML_IDP_SSO_TARGET_URL=- OAUTH_SAML_ISSUER=- OAUTH_SAML_LABEL="Our SAML Provider"- OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient- OAUTH_SAML_GROUPS_ATTRIBUTE=- OAUTH_SAML_EXTERNAL_GROUPS=- OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=- OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=- OAUTH_SAML_ATTRIBUTE_STATEMENTS_USERNAME=- OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=- OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=- OAUTH_CROWD_SERVER_URL=- OAUTH_CROWD_APP_NAME=- OAUTH_CROWD_APP_PASSWORD=- OAUTH_AUTH0_CLIENT_ID=- OAUTH_AUTH0_CLIENT_SECRET=- OAUTH_AUTH0_DOMAIN=- OAUTH_AUTH0_SCOPE=- OAUTH_AZURE_API_KEY=- OAUTH_AZURE_API_SECRET=- OAUTH_AZURE_TENANT_ID=volumes:redis-data:postgresql-data:gitlab-data:

打开编辑文件内容:

image-20240524184143182

3.2、上传到服务器
  1. 新建文件夹:

    mkdir /home/gitlab
    
  2. 上传文件docker-compose.yaml,也可以新建文件,将内容粘贴过去。

    image-20240524184829197

  3. 启动docker compose

    docker-compose up -d
    
    • -d参数:后台启动。
  4. 使用docker ps命令可以看见新增的三个docker容器:

    image-20240524190730297

  5. 浏览器访问:192.168.200.128:80即可进入GitLab的页面。

    本来我想用GitLab来整合Jenkins,但是服务器资源受限,没有配置成功,我换成了github来演示。

4、github整合Jenkins

4.1、关联github
  1. 打开github,找到Settings,找到Developer Settings,打开Psonal access tokens中的Tokens (classic),点击Generate a personal access token生成新的token。

    image-20240526132053005

  2. 填写Note,勾选下面的两个选项。

    image-20240526132356069

  3. 点击生成

    image-20240526132451337

  4. 确保复制你的token,请确保立即复制您的个人访问令牌。你再也看不到了!

    image-20240526132524834

  5. 选择你的项目,创建webhook

    image-20240526143036767

4.2、Jenkins中的github的配置

打开设置:

image-20240526153927365

在设置中找到github的选项(往下划),按照如下操作,添加Github服务器:

image-20240526153403520

上述第4步添加凭据,注意:必须是具有操作权限的github的账户!!

image-20240526153618578

添加并保存退出即可!

4.3、新建任务
  1. 新建Item

    image-20240526154453857

  2. General

  • 添加描述:

image-20240526154548087

  • 添加Github项目地址:

image-20240526154812220

  1. 源码管理:

    • image-20240526155132270

    • 添加Credentials:本篇博客的4.2中的第四步讲到,操作相同,不再赘述。

    • 设置分支

      image-20240526155347509

  2. 构建触发器:

    image-20240526170308832

  3. 构建环境

    image-20240526155751453

    凭据没有的话直接添加就行:

    image-20240526160018806

  4. Build Steps:构建步骤:

    • Set build status to “pending” on GitHub commit

      image-20240526160247886

    • 执行 shell

      image-20240526160401586

  5. 构建后操作

    image-20240526160506678

  6. 最后设置完毕保存即可。

来自曼诺尔雷迪亚兹的提示:上述的配置项只是为了了解并熟悉Jenkins,并且进行快速入门,具体的配置详情可以根据业务需求和个人喜好来具体设置不同的参数。

4.4、立即构建

image-20240526162042927

image-20240526162214977

image-20240526162240293

查看控制台输出:

image-20240526162259337

image-20240526162415535

4.5、Github代码更新之后触发构建
  1. 对代码进行更新并推送

    image-20240526162935826

    Github代码:

    image-20240526163014754

  2. 自动构建:

    image-20240526170200399

  3. 构建成功

    image-20240526170342899

四、配置自动化任务–Pipeline

1、安装Blue Ocean插件

image-20240526172129605

image-20240526172511622

image-20240526172607753

返回控制台就可以看见:

image-20240526172621220

2、新建Github测试项目

image-20240526172747746

我克隆在本地了,因为我要添加一个文件,也可以在Github中添加文件:

本地:

image-20240526172911488

github:

image-20240526172932672

3、编写Jenkinsfile文件

Jenkins流水线官方中文文档 学习Jenkins流水线。

在项目中新建文件Jenkinsfile,文件内容如下:

pipeline {agent {docker{images 'node:10'args '-p 20000:8080'}} stages {stage('Build') { steps {sh 'node -v'sh 'echo "hello world !!"'}}// stage('Test') { //     steps {//         // //     }// }// stage('Deploy') { //     steps {//         // //     }// }}
}

这个 Jenkins Pipeline 使用 Docker 作为代理,在一个包含 Node.js 的 Docker 容器中执行构建步骤。

4、推送到github项目中

image-20240526174313173

5、操作流水线Blue Ocean

  1. 打开Blue Ocean

    image-20240526174406531

  2. 创建流水线

    image-20240526174901301

    需要注意的是,这里的token权限必须要有repo和user:emil才可以,没有的话重新创建token,参照本博客4.1.

    image-20240526174756762

6、选择仓库创建流水线

image-20240526175156571

创建中:

image-20240526175242020

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

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

相关文章

world machine学习笔记(4)

选择设备: select acpect: heading:太阳的方向 elevation:太阳的高度 select colour:选择颜色 select convexity:选择突起(曲率) select height:选择高度 falloff&a…

用常识滚雪球:拼多多的内生价值,九年的变与不变

2024年5月22日,拼多多公布了今年一季度财报,该季度拼多多集团营收868.1亿元,同比增长131%,利润306.0亿,同比增长了202%,数据亮眼。 市场对拼多多经历了“看不见”、“看不懂”、“跟不上”三个阶段。拼多多…

Vue.js条件渲染与列表渲染指南

title: Vue.js条件渲染与列表渲染指南 date: 2024/5/26 20:11:49 updated: 2024/5/26 20:11:49 categories: 前端开发 tags: VueJS前端开发数据绑定列表渲染状态管理路由配置性能优化 第1章:Vue.js基础与环境设置 1.1 Vue.js简介 Vue.js (读音:/vju…

SwiftUI中的Slider的基本使用

在SwiftUI中,可以使用Slider视图创建一个滑动条,允许用户从范围中选择一个值。通过系统提供的Slider,用起来也很方便。 Slider 先看一个最简单的初始化方法: State private var sliderValue: Float 100var body: some View {V…

ollama 使用,以及指定模型下载地址

ollama windows 使用 官网: https://ollama.com/ windows 指定 models 下载地址 默认会下载在C盘 ,占用空间 在Windows系统中,可以通过设置环境变量OLLAMA_MODELS来指定模型文件的下载和存储路径。具体操作步骤如下: 1.打开系统…

【九十四】【算法分析与设计】练习四蛮力法练习,排列问题和组合问题,求解最大连续子序列和问题,求解幂集问题,求解0/1背包问题,求解任务分配问题

求解最大连续子序列和问题 给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。 例如: 序列(-2,11,-4,13,-5,-2)的最大子序列和为20…

第 33 次CCF认证

1. 词频统计 题目描述 样例输入 代码 #include <bits/stdc.h>using namespace std;int main() {int n,m;cin>>n>>m;vector<int> ans1(m,0),ans2(m,0);while (n --) {int t;cin>>t;vector<int> vis(m1,0);for (int i 1;i < t;i ) {i…

数据结构(五)

数据结构&#xff08;五&#xff09; 常见的排序算法内部排序交换插入选择归并基数 外部排序基于归并的 常见的排序算法 内部排序 交换 冒泡&#xff1a;每一次运行总会将最小的或者最大的放到前面&#xff0c;如果需要交换&#xff0c;一直在交换 快速排序*&#xff1a;经过…

2024最新前端面试八股文【基础篇293题】

⼀、HTML、HTTP、web综合问题 1 前端需要注意哪些SEO 2 <img> 的 title 和 alt 有什么区别 3 HTTP的⼏种请求⽅法⽤途 4 从浏览器地址栏输⼊url到显示⻚⾯的步骤 5 如何进⾏⽹站性能优化 6 HTTP状态码及其含义 7 语义化的理解 8 介绍⼀下你对浏览器内核的理解 9 …

【操作系统】发展与分类(手工操作、批处理、分时操作、实时操作)

2.操作系统发展与分类 思维导图 手工操作阶段&#xff08;此阶段无操作系统&#xff09; 需要人工干预 缺点&#xff1a; 1.用户独占全机&#xff0c;资源利用率低&#xff1b; 2.CPU等待手工操作&#xff0c;CPU利用不充分。 批处理阶段&#xff08;操作系统开始出现&#x…

正运动控制器:视觉纠偏和找孔

一、用户主界面CCD参数设置 通过主界面CCD参数设置&#xff0c;学习如何操作计算相机中心与电批中心的偏移量&#xff0c;以及相机标定的功能。 1、相机中心与电批中心的偏移量计算 1.1、在用户主界面点击CCD参数按钮&#xff0c;进入CCD设置界面。 主界面 CCD参数设置界面 1…

制作电子画册速成攻略,快来试试

​当今社会&#xff0c;数字媒体日益普及&#xff0c;电子画册作为一种崭新的展示方式&#xff0c;受到了越来越多人的青睐。它不仅形式新颖&#xff0c;互动性强&#xff0c;而且制作起来也并不复杂。想知道如何快速掌握制作电子画册的技巧吗&#xff1f;我来教你吧。 接下来&…

推荐13款常用的Vscode插件,提高前端日常开发效率

1. Live Server Live Server 插件是一个用于前端开发的扩展&#xff0c;它的主要作用是提供一个本地开发服务器&#xff0c;以便实时预览和调试网页应用程序。其最大特点在于热重载&#xff0c;即开发者可实时预览代码效果。 因为Live Server 允许开发者在浏览器中实时预览您正…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星&#xff01;刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说&#xff0c;Llama 3在开源的状态下做到了 GPT-3.7 的水平&#xff0c;必然会显得用户&#xff08;尤其是企业用户&#xff0c;他们更具备独立部…

C#调用HttpClient.SendAsync报错:System.Net.Http.HttpRequestException: 发送请求时出错。

C#调用HttpClient.SendAsync报错&#xff1a;System.Net.Http.HttpRequestException: 发送请求时出错。 var response await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, cancellationToken);问题出在SSL/TLS&#xff0c;Windows Server 2012不支持…

Vue3解决“找不到模块“@/components/xxx.vue”或其相应的类型声明”

文章目录 前言背景问题描述解决方案总结 前言 在使用 Vue 3 开发项目时&#xff0c;遇到“找不到模块 ‘/components/xxx.vue’ 或其相应的类型声明”的错误是一个常见问题。这通常与 TypeScript 和模块解析相关的配置不当有关。本文将详细介绍如何解决此问题&#xff0c;确保…

2024-6-遥远的救世主

2024-6-遥远的救世主 2024-4-18 豆豆 fatux&#xff1a; 2021.5.26 看完电视剧《天道》之后购买本书&#xff0c;断断续续一直没有读完。 非常好奇&#xff0c;一个什么样的作者能写出如此奇书。老丁&#xff0c;一个智者&#xff0c;智者是多么孤独&#xff0c;因为找不到同…

信息安全等级保护测评: 登陆日志

文章目录 引言I 登录日志表结构设计II 日志处理2.1 封装日志入库2.2 收集登陆信息2.3 查询接口引言 等保测评是信息安全等级保护测评的简称,是对信息和信息载体按照重要性等级分级别进行检测、评估的过程。 背景:近期AIS监控平台(网页版)等保测评,发现没有登陆日志,现要…

从用法到源码再到应用场景:全方位了解CompletableFuture及其线程池

文章目录 文章导图什么是CompletableFutureCompletableFuture用法总结API总结 为什么使用CompletableFuture场景总结 CompletableFuture默认线程池解析&#xff1a;ForkJoinPool or ThreadPerTaskExecutor&#xff1f;ForkJoinPool 线程池ThreadPerTaskExecutor线程池Completab…

Qt 界面上字体自适应控件大小 - 随控件缩放

Qt 界面上字体自适应控件大小 - 随控件缩放 引言一、设计思路二、进阶版大致思路三、参考链接 引言 Qt控件自适应字体大小可以用adjustSize()函数&#xff0c;但字体自适应控件大小并没有现成的函数可调. - 本文实现了按钮上的字体随按钮大小变化而变化 (如上图所示) - 其他控件…