容器化安装Jenkins部署devops

news2024/11/9 10:32:39

基础环境介绍

系统使用的是centos7.9

内核使用的是5.16.13-1.el7.elrepo.x86_64

容器使用的是26.1.4

docker-compose使用的是 v2.29.0

链路图

devops

配置git环境插件

部署好jenkins后开始配置 jenkins连接git,这里需要jenkins有连接git的插件。在已安装的插件中寻找git。

在可用的插件里找到 git plugin 

在可用的插件里找到  Git Parameter

在页面看到有git插件后 进入容器也需要再验证一下,命令行直接输入git 看看是否有很多命令出来。

 jenkinsdata]# docker exec -it bb4 /bin/bash
jenkins@bb4419a0ac15:/$ git
git                 git-lfs             git-receive-pack    git-shell           git-upload-archive  git-upload-pack
jenkins@bb4419a0ac15:/$ git

这里git插件验证完成,没啥问题了。

配置jenkins里的jdk和maven环境变量

公司大部分都是用的java项目打包的

这里服务器上有jdk和maven  ,直接把文件目录移动过去就好了。

cp -r /usr/local/jdk/ /data/jenkinsdata/
cp -r /root/maven/ /data/jenkinssdata/

# 记得授权app权限 这里容器内是用app启动的
chown -R app:app maven  jdk

配置jdk的变量

进入容器查看jdk的路径

maven]# docker exec -it bb4 /bin/bash
jenkins@bb4419a0ac15:/$ ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
jenkins@bb4419a0ac15:/$ cd /var/jenkins_home/jdk/
jenkins@bb4419a0ac15:~/jdk$ ls
COPYRIGHT  README.html                         THIRDPARTYLICENSEREADME.txt  include         jmc.txt  legal  man      src.zip
LICENSE    THIRDPARTYLICENSEREADME-JAVAFX.txt  bin                          javafx-src.zip  jre      lib    release
jenkins@bb4419a0ac15:~/jdk$ pwd
/var/jenkins_home/jdk

在页面配置jdk环境变量

1、这里不要选择自动安装,已经把jdk目录复制到宿主机的卷上了。

2、这里写的路径是上面进入容器后的路径。

配置maven的变量

进入容器查看maven的路径

jenkins@bb4419a0ac15:~/maven$ pwd
/var/jenkins_home/maven

在页面配置maven环境变量

1、这里不要选择自动安装,已经把maven目录复制到宿主机的卷上了。

2、这里写的路径是上面进入容器后的路径。

配置一个test项目

目的:是要 jenkins能够从gitlab拉取代码,并且完成打包编译的操作。

第一步构建项目

新建任务

这里名称自定义起一个,选择自由风格创建。

页面选择刚创建的test0920v1项目工程

第二步配置gitlab地址及凭证

这里点击 源码管理 开始配置私有仓库gitlab地址,这里会报错因为没有配置凭证

添加账号密码

选择刚添加的账号密码。

注意 这里需要jenkins容器所在宿主机可以连接gitlab,这里连接gitlab的账号有权限拉取代码。如果配置没有问题后 页面不会出现报错信息。

第三步拉取代码查看是否成功

点击项目 立即构建

控制台输出

查看日志信息

进入容器查看本次是否把代码拉取下来了,进入目录查看代码文件,看到是有文件的,说明拉取代码成功。

jenkins@bb4419a0ac15:~/maven$ cd /var/jenkins_home/workspace/test0920v01
jenkins@bb4419a0ac15:~/workspace/test0920v01$ pwd
/var/jenkins_home/workspace/test0920v01
jenkins@bb4419a0ac15:~/workspace/test0920v01$ ls
Jenkinsfile  README.md  docker  pom.xml  src

第四配置maven编译代码

选择到build steps --> maven目标

选择刚才添加的maven

编写编译代码的命令,保存退出点击立即构建。

注意这里写命令的时候 不要写mvn了 clean install -Dmaven.test.skip=true -U  直接写mvn后面的参数就好了,如果这里 写成 mvn clean install -Dmaven.test.skip=true -U 会报错。

点击构建查看日志,这里我就不再重复截图了。

这里看到日志是编译成功了

进入服务器查看是否打包成功,查看到是有jar包的,再次验证成功。

jenkins@bb4419a0ac15:~/workspace/test0920v01/target$ pwd
/var/jenkins_home/workspace/test0920v01/target
jenkins@bb4419a0ac15:~/workspace/test0920v01/target$ ls
classes  datax-db.jar  datax-db.jar.original  generated-sources  maven-archiver  maven-status

第五步 把打包好的jar包发送到服务器上

推送到目标服务器上 还需要ssh插件,Publish Over SSH  ,  SSH

上面插件安装完成后开始配置ssh插件

这里先配置一个远程服务器。(这里如果点击没有反应,重启一下容器)

这里选择高级选项点击输入密码

点击测试密码,显示success没有问题了。

 开始配置Job

选择构建后操作,这里因为上面安装好了插件,这里才有

找到构建后操作

下面要写容器内打包的相对路径,查看容器内的路径

jenkins@bb4419a0ac15:~/workspace/test0920v01$ ls
Jenkinsfile  README.md  docker  pom.xml  src  target
jenkins@bb4419a0ac15:~/workspace/test0920v01$ cd target/
jenkins@bb4419a0ac15:~/workspace/test0920v01/target$ ls
classes  datax-db.jar  datax-db.jar.original  generated-sources  maven-archiver  maven-status

这里路径是target\*.jar 目录下的jar文件

查看任务日志 已经执行了推送步骤

查看目标服务器是否有文件,这里显示目标服务器上已有jar包。

[root@docker-010050111111-cm5 target]# pwd
/opt/target
[root@docker-010050111111-cm5 target]# ls
datax-db.jar

第六步 在代码中配置docker目录

在代码根目录里增加一个docker目录,创建一个dockerfile文件。

FROM harbor.xxx.xxx.com/base/ubuntu:20.04
WORKDIR /opt

ENV project=$project
ENV env_huanjing=$env_huanjing
ENV pp_agent_id=$pp_agent_id
ENV jacoco="-javaagent:/data/jacoco/org.jacoco.agent-0.8.5-runtime.jar=includes=*,output=tcpserver,address=*,port=18524"
ENV pp_agent="-javaagent:/data/pp-agent/pinpoint-bootstrap.jar -Dpinpoint.applicationName=tihuan_project-tihuan_app_env"
ENV java_opts="-Xms1012m -Xmx2072m -XX:-UseGCOverheadLimit -Dspring.cloud.nacos.config.group=FUSION_GROUP  -Dspring.cloud.nacos.server-addr=10.50.xxx.17:8848,10.50.xxx.18:8848,10.50.xxx.19:8848 -Dspring.cloud.nacos.config.namespace=ad938948-cc3e-4bcc-b458-f0af9548eeef"

# app
ADD *.jar .
CMD  /usr/local/jdk/bin/java -jar ${pp_agent} ${jacoco} ${java_opts} -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=utf-8 -Dspring.profiles.active=${app_env} -Dspring.cloud.nacos.discovery.ip=${app_serverip} -Dspring.cloud.nacos.discovery.port=${app_port} datax-db.jar

创建docker-compose.yml 文件

services:
  datax-db:
    build:
      context: ./
      dockerfile: Dockerfile
    image: datax-db:v1.0.0
    container_name: datax-db
    ports:
      - 8080:8080

这里添加了两个docker相关的文件,一个是dockerfile打包镜像,另外一个是 docker-compose文件,后构建后操作 把命令推送到目标服务器。

cd docker
mv ../target/*.jar ./
docker-compose down
docker-compose up -d --build

以上内容根据每个人的不同的镜像及环境修改,编辑完后开始点击立即构建,会把代码及文件推送至目标服务器,并在目标服务器上打包镜像及运行容器。

在目标服务器上查看已运行的容器。这里编译打包和运行命令是需要根据业务改变的。

查看任务的状态,查看任务的日志

这里看到传了4个文件 并且后续的shell命令已执行成功。

查看目标服务器容器运行情况,(这里报错原因是因为业务连接依赖问题,就不再改了,这里算是已成功)

 docker]# docker ps -a | grep datax-db
c7d95614554f        datax-db:v1.0.0                                                                          "/bin/sh -c '/usr/lo…"   41 seconds ago      Exited (1) 31 seconds ago                                                                   datax-db

到这里 拉取代码,编译 ,再部署到目标机器上使用容器的方式已完成了。

配置sonarqube

这里分为三部分  第一部分部署sonarqube服务,第二部分部署sonarqube的jenkins插件,第三部分部署sonarqube在jenkins的环境变量。

第一部分部署sonarqube服务

软件分为社区版和商用版,这里下载稳定的社区版本(lts-community)

 docker pull sonarqube:lts-community
 docker pull postgres

新版本使用Pg做为数据库。

创建一个存储的sonarqube的目录,创建docker-compose文件

services:
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      TZ: Asia/Shanghai
  sonarqube:
    image: sonarqube:lts-community
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - 9000:9000
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
      TZ: Asia/Shanghai
networks:
  sonarnet:
    driver: bridge

启动服务

docker-compose up -d

启动sonarnet服务,这里查看容器服务报错,根据提示修改配置。

anglingIndicesState] gateway.auto_import_dangling_indices is disabled, dangling indices will not be automatically detected or imported and must be managed manually
2024.09.23 09:36:33 INFO  es[][o.e.n.Node] initialized
2024.09.23 09:36:33 INFO  es[][o.e.n.Node] starting ...
2024.09.23 09:36:33 INFO  es[][o.e.t.TransportService] publish_address {127.0.0.1:44639}, bound_addresses {127.0.0.1:44639}
2024.09.23 09:36:33 INFO  es[][o.e.b.BootstrapChecks] explicitly enforcing bootstrap checks

ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonarqube/logs/sonarqube.log
2024.09.23 09:36:33 INFO  es[][o.e.n.Node] stopping ...
2024.09.23 09:36:33 INFO  es[][o.e.n.Node] stopped
2024.09.23 09:36:33 INFO  es[][o.e.n.Node] closing ...
2024.09.23 09:36:33 INFO  es[][o.e.n.Node] closed
2024.09.23 09:36:33 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]: 78
2024.09.23 09:36:33 INFO  app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2024.09.23 09:36:33 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped

修改系统配置

echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p   #立即生效

修改完成后再次启动服务

docker-compose up -d

访问web页面  IP地址+端口9000,账号密码默认admin/admin

首次登录后修改admin账号密码

修改后 登录访问页面

下载安装中文插件

点击重启服务,这里是容器启动的,还需要在宿主机重启容器。

到创建docker-compose目录下 restart

sonarqube_docker]# docker-compose restart
[+] Restarting 2/2
 ✔ Container sonarqube  Started                                                                                                          1.1s
 ✔ Container db         Started          

访问web页面,查看已换成中文。

第二部分部署sonarqube的jenkins插件

 在插件中搜索 sonarqube插件,安装插件。

安装插件这里有可能会安装失败

等待重启后打开jenkins的web页面,系统管理-->system

配置sonarqube参数,在下面添加账号的token。

这里选择凭证类型 Secret text 类型

在sonarqube的web页面找到右上角的 账号-->安全 ,根据提示 输入名称 ,类型 和选择过期时间,点击生成。

复制记住这个token,黏贴到jenkins凭证这里,输入描述保存。

选择刚添加的这个凭证,保存

第三部分部署sonarqube在jenkins的环境变量

sonar-scaner下载地址

https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.1.2450-linux.zip

可以在以下地址寻找更多版本的安装包。

把下载的包上传到服务器上,可以直接传到jenkins映射的路径里

# 这里上传和解压都省略了,还需要给目录授予一定的权限,这里jenkins映射出来的是什么文件权限,就给sonar也授予什么文件权限就好了
jenkins_docker]# cd /data/jenkinsdata/sonar-scanner/
sonar-scanner]# pwd
/data/jenkinsdata/sonar-scanner
sonar-scanner]# ls
bin  conf  jre  lib

配置sonarqube的环境变量,这里不要选择自动安装,把自动安装对钩取消就好。名字随意输入一个,环境变量要容器内的路径,这里/var/jenkins_home是容器路径。这里路径如果输入错误会有黄色的提示。

配置之前的test项目,在增加构建步骤这里点击下 下拉列表,选择execule sonarqube scanner

这里配置完成,(这里注意Key的首字母要大写)

sonar.projectname=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.source=./
sonar.java.binaries=target

配置示例

这里点击立即构建查看详情,sonarqube命令正常执行了。

日志输出是正常的。

查看sonarqube的web终端。这里选择项目,查看到刚推送的详情,可以查看项目的具体情况。

点进去可以看到更详细的信息

以上的问题由研发解决,这里运维无需处理。

配置harbor

把自定义镜像推送到harbor服务器,目标服务器端通过harbor仓库来拉取文件。

安装harbor仓库

github下载地址

https://github.com/goharbor/harbor/releases/download/v2.11.1/harbor-offline-installer-v2.11.1.tgz

下载文件到服务器,解压包 配置文件harbor.yml.tmpl复制出来一份harbor.yml。

harbor]# pwd
/data/harbor
harbor]# ls
common.sh  harbor.v2.11.1.tar.gz  harbor.yml  harbor.yml.tmpl  install.sh  LICENSE  prepare

编辑 harbor.yml 文件

1、这里修改 hostname 后面改成IP地址

2、把https都注释掉

3、把服务映射到宿主机上的存储路径变一下 data_volume: /data/harbordata 

其它的配置不变

 harbor]# egrep -v '#|^$' harbor.yml
hostname: 10.50.xxx.xxx
http:
  port: 80
harbor_admin_password: Harbor12345
database:
  password: root123
  max_idle_conns: 100
  max_open_conns: 900
  conn_max_lifetime: 5m
  conn_max_idle_time: 0
data_volume: /data/harbordata
trivy:
  ignore_unfixed: false
  skip_update: false
  skip_java_db_update: false
  offline_scan: false
  security_check: vuln
  insecure: false
  timeout: 5m0s
jobservice:
  max_job_workers: 10
  job_loggers:
    - STD_OUTPUT
    - FILE
notification:
  webhook_job_max_retry: 3
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor
_version: 2.11.0
proxy:
  http_proxy:
  https_proxy:
  no_proxy:
  components:
    - core
    - jobservice
    - trivy
upload_purging:
  enabled: true
  age: 168h
  interval: 24h
  dryrun: false
cache:
  enabled: false
  expire_hours: 24

开始安装harbor

harbor]# sh install.sh

查看运行日志,这边查看到运行成功。

✔ ----Harbor has been installed and started successfully.----
 harbor]# docker-compose ps
WARN[0000] /data/harbor/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
NAME                IMAGE                                 COMMAND                   SERVICE       CREATED         STATUS                            PORTS
harbor-core         goharbor/harbor-core:v2.11.1          "/harbor/entrypoint.…"   core          8 seconds ago   Up 6 seconds (health: starting)
harbor-db           goharbor/harbor-db:v2.11.1            "/docker-entrypoint.…"   postgresql    8 seconds ago   Up 6 seconds (health: starting)
harbor-jobservice   goharbor/harbor-jobservice:v2.11.1    "/harbor/entrypoint.…"   jobservice    7 seconds ago   Up 2 seconds (health: starting)
harbor-log          goharbor/harbor-log:v2.11.1           "/bin/sh -c /usr/loc…"   log           8 seconds ago   Up 7 seconds (health: starting)   127.0.0.1:1514->10514/tcp
harbor-portal       goharbor/harbor-portal:v2.11.1        "nginx -g 'daemon of…"   portal        8 seconds ago   Up 6 seconds (health: starting)
nginx               goharbor/nginx-photon:v2.11.1         "nginx -g 'daemon of…"   proxy         7 seconds ago   Up 6 seconds (health: starting)   0.0.0.0:80->8080/tcp, :::80->8080/tcp
redis               goharbor/redis-photon:v2.11.1         "redis-server /etc/r…"   redis         8 seconds ago   Up 6 seconds (health: starting)
registry            goharbor/registry-photon:v2.11.1      "/home/harbor/entryp…"   registry      8 seconds ago   Up 6 seconds (health: starting)
registryctl         goharbor/harbor-registryctl:v2.11.1   "/home/harbor/start.…"   registryctl   8 seconds ago   Up 6 seconds (health: starting)

查看服务挂载出来的持久化目录

harbor]# ls /data/harbordata/
ca_download  database  harbor  job_logs  redis  registry  secret

访问harbor,IP地址+80端口 账号默认是admin/Harbor@123

新建私有仓库

创建repo镜像仓库

这里如果让宿主机成功推送容器到镜像地址,这里还需要修改docker服务的配置文件/etc/docker/daemon.json,修改完配置文件后重启服务。

{
        "insecure-registries": ["10.50.xxx.xxx:80"],
        "registry-mirrors": [
                "https://hub.iyuu.cn",
                "https://docker.1panel.live"
        ],
        "data-root": "/data/dockerdb/docker"
}

重启完后开始登录docker服务,这里看到Succeeded 是登录成功了。

 harbor]# docker login -u admin -p Harbor12345 10.50.xxx.xxx:80
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

给镜像打上标签

 docker tag jenkins/jenkins:2.319.1-lts 10.50.xxx.xxx:80/repo/jenkins:2.319.1-lts

查看镜像

10.50.110.152:80/repo/jenkins   2.319.1-lts     2a4bbe50c40b   2 years ago    441MB
jenkins/jenkins                 2.319.1-lts     2a4bbe50c40b   2 years ago    441MB

推送镜像到私有仓库

 docker push 10.50.xxx.xxx:80/repo/jenkins:2.319.1-lts

web页面查看镜像,推送成功。

以上harbor容器已经安装好了,如需让jenkins使用容器并推送,需要修改两个地方,一个是宿主机的/var/run/docker.sock,另一个是daemon.json 两个文件,修改完成后,jenkins就可以直接使用宿主机的容器环境了。

第一步 先对需要修改的配置文件进行备份

run]# cp -ar docker.sock docker.sock.bak
run]# ll docker.sock*
srw-rw---- 1 root docker 0 9月  11 16:07 docker.sock
srw-rw---- 1 root docker 0 9月  11 16:07 docker.sock.bak

第二步 开始修改配置文件

授权文件

run]# chown root:root docker.sock
run]# chmod 777 docker.sock

查看现在的权限

srwxrwxrwx  1 root   root      0 9月  11 16:07 docker.sock
srw-rw----  1 root   docker    0 9月  11 16:07 docker.sock.bak

再次编辑jenkins的docker-compose文件

jenkins_docker]# cat docker-compose.yaml
services:
  jenkins:
    image: jenkins/jenkins:latest
    container_name: jenkins
    environment:
      - TZ=Asia/Shanghai
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - /data/jenkinsdata:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
      - /usr/bin/docker:/usr/bin/docker
      - /etc/docker/daemon.json:/etc/docker/daemon.json

重新加载一下

jenkins_docker]# docker-compose up -d
[+] Running 1/1
 ✔ Container jenkins  Started                              

进入容器运行一下docker命令

jenkins_docker]# docker exec -it jenkins /bin/bash
jenkins@4146a6753382:/$ docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:32:04 2024
 OS/Arch:           linux/amd64
 Context:           default

编辑shell,根据环境编写镜像生成的命令。

mv target/*.jar docker/
docker build -t datax-db:v1 docker/

构建这里选择一个执行 shell 编写如下命令

点击构建看到这边日志显示已经在打包了

服务器命令行查看镜像

docker]# docker images | grep datax
datax-db                        v1              792dba69b798   3 minutes ago   200MB

这边已经生成了镜像,再次把镜像推送到私有仓库

编辑刚才的shell窗口

mv target/*.jar docker/
docker build -t datax-db:v1 docker/
docker login -u admin -p Harbor12345 10.50.xxx.xxx:80
docker tag datax-db:v1 10.50.xxx.xxx:80/repo/datax-db:v1
docker push 10.50.xxx.xxx:80/repo/datax-db:v1

编辑填入shell窗口中

点击构建可以看到有日志输出了。

这边已经把镜像推送至仓库了。

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

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

相关文章

【SD教程】图片也能开口说话?别惊讶!用SadTalker插件,一键生成自己的数字人,本地部署,免费使用!(附资料)

最近数字人越来越火,连互联网大佬都纷纷下场,比如360的周鸿祎,京东的刘强东等等。小伙伴可能也想拥有自己的数字人如果想用最简单的方式,那么可以用第三方的网站,例如 HeyGen平台、腾讯的智影等等。可这些网站都是收费…

HFSS中看TDR波形详细设置以及相关的解释

时域反射测量(TDR)中心思想就是用阶跃函数作为激励,应用在模型上,并检查反射随时间的变化。在检查时域之前,必须对driven solution(Modal、Terminal或Transient)执行插值扫描。然后,…

vite分目录打包以及去掉默认的.gz 文件

1.vite打包情况介绍: 1.1vite在不进行任何配置的情况下,会将除开public的所有引用到资源打包编译添加哈希值至assets文件夹中(非引用文件以及行内样式图片未被打包编译资源会被treeSharp直接忽略不打包),     1.2w…

阿里云函数计算 x NVIDIA 加速企业 AI 应用落地

作者:付宇轩 前言 阿里云函数计算(Function Compute, FC)是一种无服务器(Serverless)计算服务,允许用户在无需管理底层基础设施的情况下,直接运行代码。与传统的计算架构相比,函数…

极星Polestar EDI 项目案例

近期国内汽车行业供应商J公司收到了极星Polestar的邀请,需要通过EDI与其国内工厂传输业务数据。本案例将为大家介绍对接过程以及实施方案。 梳理需求文档 极星Polestar的EDI需求与Volvo一样,传输协议选择 OFTP,报文标准为EDIFACT&#xff0…

Swing模拟银行柜台系统

> 这是一个基于JavaSwing实现的模拟银行柜台系统。 > 具有管理员、柜员、客户三种登录角色。 > 支持开户、注册、存取款、转账、汇款、账单查询等功能。 > 本项目适合JAVA初学者作为入门学习项目。 一、部分界面演示 二、基础依赖 技术/框架版本描述Java11编…

Vue前端浏览器指纹获取:数字世界的身份密码

程序员必备宝典https://tmxkj.top/#/一个开源的JavaScript库,它通过收集用户浏览器的多种属性(如屏幕分辨率、浏览器插件、字体、Canvas和WebGL等)来生成一个独特的浏览器指纹,用于识别和追踪用户。 #Github地址 GitHub - finger…

Uniapp时间戳转时间显示/时间格式

使用uview2 time 时间格式 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架 <text class"cell-tit clamp1">{{item.create_time}} --- {{ $u.timeFormat(item.create_time, yyyy-mm-dd hh:MM:ss)}} </text>

apply、call和bind的作用和区别

apply与call 首先介绍一下apply与call&#xff0c;因为这两个方法的功能和使用方式都差不多&#xff0c;只是传参的方式不同。call和apply的作用都是改变函数运行时的上下文&#xff08;context&#xff09; 语法 fun.call(thisArg, arg1, arg2, ...)fun.apply(thisArg, arg…

类的难疑点

一、知识点 1、类的属性和对象属性&#xff08;实例属性&#xff09; shuxing"123" self.shuxing"123" 2、类的对象 self.loginMyclass() loginMyclass() 3、访问类属性和方法的操作 通过“类名.属性”访问&#xff1a;Myclass.shuxing 通…

详解常见排序

目录 ​编辑 插入排序 希尔排序&#xff08;缩小增量排序&#xff09; 选择排序 冒泡排序 堆排序 快速排序 hoare版 挖坑法 前后指针法 非递归版 归并排序 递归版 非递归版 计数排序 声明&#xff1a;以下排序代码由Java实现&#xff01;&#xff01;&#xff01…

【研赛D题成品论文】24华为杯数学建模研赛D题成品论文(第一问)+可运行代码丨免费分享

2024华为杯研究生数学建模竞赛D题精品成品论文已出&#xff01; D题 大数据驱动的地理综合问题 一、问题分析 问题一&#xff1a;目标&#xff1a;利用1990-2020年的数据&#xff0c;针对降水量和土地利用的时空演化特征进行描述。数据&#xff1a;两个核心变量&#xff0c;一…

电商效果图渲染神器:轻松高效出图

在这个电商行业飞速发展的今天&#xff0c;离不开商品图的效果。而电商效果图同样离不开渲染&#xff0c;而大量的渲染需求有需要大量的机器&#xff0c;还要追求更快的渲染速度和更稳定的性能。毕竟&#xff0c;谁不想快点完成项目又省心呢&#xff1f; 而云渲染服务是个很好…

C++之STL—deque容器

双端数组 区别于 vector (单端数组)&#xff0c; 构造函数 注意&#xff1a;读取数据时&#xff0c;const修饰保证函数内只能读取&#xff0c;不能修改数据 void print(const deque<int>& deq) {for (deque<int>::const iterator it deq.begin(); it ! deq.e…

使用 Nuxt Kit 的构建器 API 来扩展配置

title: 使用 Nuxt Kit 的构建器 API 来扩展配置 date: 2024/9/24 updated: 2024/9/24 author: cmdragon excerpt: 摘要:本文详细介绍了如何使用 Nuxt Kit 的构建器 API 来扩展和定制 Nuxt 3 项目的 webpack 和 Vite 构建配置,包括扩展Webpack和Vite配置、添加自定义插件、…

正向科技|格雷母线定位系统的设备接线安装示范

格雷母线安装规范又来了&#xff0c;这次是设备接线步骤 格雷母线是格雷母线定位系统的核心部件&#xff0c;沿着移动机车轨道方向上铺设&#xff0c;格雷母线以相互靠近的扁平状电缆与天线箱电磁偶合来进行信号传递&#xff0c;从而检测得到天线箱在格雷母线长度方向上的位置。…

OpenLayers 开源的Web GIS引擎 - 添加地图控件地图控件

中心点按钮、地图放大缩小滑块、全图和比例尺控件 直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.…

python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)

文章目录 前言1、任务目标2、抓取流程2.1 分析网页2.2 编写代码2.3 思路分析前言 本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。 1、任务目标 目标网…

基于深度学习的树叶识别系统的设计与实现(pyqt5 python3.9 yolov8 10000张数据集)

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

vector的模拟实现以及oj题

前言 上篇博客介绍了voctor的大部分的重要接口&#xff0c;本篇博客将模拟实现部分接口的效果。 vector的模拟实现 vector的模拟实现分为两个文件进行实现&#xff1a;vector.h、test.cpp vector.h 该部分为文件的主要部分&#xff0c;分别实现了vector的以下功能&#xf…