使用docker安装jenkins,然后使用jenkins本地发版和远程发版

使用docker安装jenkins,然后使用jenkins本地发版和远程发版

1、安装docker

1.安装必要的一些系统工具
sudo yum install docker-ce
2.添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.更新yum索引列表并安装Docker引擎
sudo yum makecache fast
4.yum索引列表没有更新可以直接使用yum makecache(若有报错请翻阅第四部分第二条)
docker-ce:社区版的,docker-ee:企业版的
sudo yum install docker-ce
5.安装过程中会提示确认,输入y以确认
6.开启Docker服务
sudo service docker start
或者 systemctl start docker
7.测试是否安装成功
docker version

2、使用安装jenkins

  1. 启动docker的jenkins,步骤1和2使用的是命令行方式,步骤3和步骤4是使用的       Dockerfile加ssh脚本方式

    1.拉取镜像
 docker pull jenkins/jenkins
    2.docker run命令运行jenkins容器
# -p端口映射,-v挂载工作目录 --env 指定一些配置 如--prefix是我要使用nginx代理,所以给jenkins加上前缀
# 第二个-v是挂载的maven,需要先在官网下载一个maven,把配置文件改为阿里云镜像,服务器上的路径是/datadrive/software/docker-config/jenkins/maven,jenkins容器内对应的是/home/maven路径
# 挂载jenkins_home时可能在启动时会报Permission denied,可以进入文件目录,使用chmod 777 /datadrive/software/docker-config/jenkins/jenkins_home:/var/jenkins_home 给这个文件夹权限
# git和apache-maven-3.6.3可以到jenkins的全局工具中选择自动安装,当然jdk也可以,这样就可以不挂载了
 docker run --name jenkins \
      -p 8003:8080 -p 50000:50000 \
      -v /datadrive/software/docker-config/jenkins/jenkins_home:/var/jenkins_home \
      -v /datadrive/software/apache-maven-3.6.3:/datadrive/software/apache-maven-3.6.3 \
      -v /datadrive/software/jdk1.8.0_301:/datadrive/software/jdk1.8.0_301 \
      -v /datadrive/software/git:/datadrive/software/git \
      -v /datadrive/:/datadrive/ \
      -v /run/docker.sock:/var/run/docker.sock \
      -v /usr/bin/docker:/usr/bin/docker \
      -v "$HOME":/home \
      --env JENKINS_OPTS="--prefix=/jenkins -Xmx512m" \
      -d jenkins/jenkins
    3.使用Dockerfile制作镜像
FROM jenkins/jenkins:latest

# 更改用户为root
USER root

       创建Dockerfile touch Dockerfile
        给Dockerfile赋权限 chmod 1777 Dockerfile

    4.使用ssh脚本制作构建镜像和启动容器
#!/bin/bash -il
cd /datadrive/software/docker-config/jenkins
docker rm -f ai-statistics-service
docker rmi -f jenkins/jenkins:latest
docker build -t jenkins/jenkins:latest -f Dockerfile .
docker run --name jenkins \
                                -p 8003:8080 -p 50000:50000 \
                                -v /datadrive/software/docker-config/jenkins/jenkins_home:/var/jenkins_home \
                                -v /datadrive/software/apache-maven-3.6.3:/datadrive/software/apache-maven-3.6.3 \
                                -v /datadrive/software/jdk1.8.0_301:/datadrive/software/jdk1.8.0_301 \
                                -v /datadrive/software/git:/datadrive/software/git \
                                -v /datadrive/:/datadrive/ \
                                -v /run/docker.sock:/var/run/docker.sock \
                                -v /usr/bin/docker:/usr/bin/docker \
                                -v "$HOME":/home \
                                --env JENKINS_OPTS="--prefix=/jenkins -Xmx512m" \
                                -d jenkins/jenkins:latest

        创建jenkins脚本文件 touch jenkins.sh
        给Dockerfile脚本文件 chmod 1777 jenkins.sh
        执行脚本文件 ./jenkins.sh

  2. 构建jenkins容器如果出现错误

touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
表示容器中的/var/jenkins_home路径对应的宿主机地址/datadrive/software/docker-config/jenkins/jenkins_home:/var/jenkins_home
的权限不足,需要把宿主机的地址权限使用chmod 1777 xxx更改下,再启动容器就可以了

  3. 进入jenkins容器内

#jenkins账号登录进入
   docker exec -it jenkins bash
 #root账号登录进入
   docker exec -u 0 -it jenkins bash
   whoami docker容器可以查看当前用户是否为root
 # 获取密码
   cat /var/jenkins_home/secrets/initialAdminPassword

  4. 构建流程

1.插件管理中选择Available plugins菜单搜索:Publish Over SSH插件下载
在这里插入图片描述

2.全局工具配置
 1.如果是自动安装它的安装路径是/datadrive/software/docker-config/jenkins/jenkins_home/tools,注意是docker的映射路径jenkins_home
 2.jdk安装,可以使用宿主机的jdk,但是启动docker的时候需要将宿主机的jdk映射到docker中;
在这里插入图片描述
 3.安装Git installations
在这里插入图片描述

 4.Maven安装,自动安装路径
在这里插入图片描述

3.cd /datadrive/software/docker-config/jenkins/jenkins_home/workspace这个路径是jenkins的存储路径,构建项目存储在这个路径下
4.凭据管理,新增git账号和linux账号的凭据
在这里插入图片描述

  5.系统管理菜单

在这里插入图片描述

  6.构建任务

 1.新建任务,填写任务名称,选择构建一个自由风格的软件项目
在这里插入图片描述

 2.配置git
在这里插入图片描述

 3.选择Build Steps,按照顺序添加下面两个构建步骤
在这里插入图片描述

  1.调用顶层 Maven 目标
在这里插入图片描述
   2.执行 shell
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  7.构建vue前端

1.构建流程
  1.插件管理中选择Available plugins菜单搜索:nodejs
在这里插入图片描述
  2.全局工具配置NodeJS
在这里插入图片描述
  3.凭据管理,新增git账号
在这里插入图片描述

  2.构建任务
   1.新建任务,填写任务名称,选择构建一个自由风格的软件项目
在这里插入图片描述
  2.配置git
在这里插入图片描述
  3.选择源码管理,搜索:Provide Node & npm bin/ folder to PATH菜单勾选上
在这里插入图片描述
  4.选择Build Steps,执行shell
在这里插入图片描述

  8. 构建错误

1.git rev-parse --resolve-git-dir /var/jenkins_home/workspace/ai-admin/.git # timeout=10
  可以忽略
2.构建项目出现错误:Exception:Auth fail for methods ‘publickey,gssapi-keyex,gssapi-with-mic,password’
 chmod 700 /root/.ssh
 chmod 600 /root/.ssh/authorized_keys
3.com.jcraft.jsch.JSchException: Session.connect: java.net.SocketTimeoutException: Read timed
  timeout延长到100
4.symbol class base64encoder location package sun.misc
 到全局工具中把jdk设置为1.8,指定jdk的 JAVA_HOME=/datadrive/software/jdk1.8.0_301,宿主机的映射路径
5.jenkins cp: cannot create regular file xxx Permission denied
 使用sudo
6./tmp/jenkins17356870084788890789.sh: line 71: sudo: command not found
 找不到sudo命令,需要使用root账号登录容器docker exec -u 0 -it jenkins bash,进行yum下载命令
7.bash: docker: command not found
  -v /run/docker.sock:/var/run/docker.sock
 -v /usr/bin/docker:/usr/bin/docker
8.dial unix /var/run/docker.sock: connect: permission denied
  重启失效:sudo chmod 666 /var/run/docker.sock
9.bash: /usr/bin/docker: Permission denied
 sudo chmod 777 /usr/bin/docker
10.Step 1/7 : FROM java:8
 manifest for java:8 not found: manifest unknown: manifest unknown
 DockerFile中的FROM镜像有问题
11.E: List directory /var/lib/apt/lists/partial is missing. - Acquire (13: Permission denied)
 这里是权限报错,在exec进来的时候加上 -u 0 即可:
  docker exec -u 0 -it jenkins bash
12.bash: yum: command not found
 apt-get update
  apt-get install sshpass 安装sshpass命令
13.jenkins执行shell执行完成后无法停止
 是因为使用sshpass登录需要执行exit退出指令
14.stderr: fatal: unable to access ‘https://gitee.com/hahaha9/ai-project.git/’:Failed to connect to gitee.com port 443 after 255971 ms: Couldn’t connect to server
 git仓库地址Repository URL有误,如果是gitee仓库有时候可以不稳定,到本地拉取提交下项目再试试
15.bash: npm: command not found
 使用root账号登录容器:docker exec -u 0 -it jenkins bash
 apt-get install npm 安装npm命令
16.scp: local “dist” is not a regular file
 scp: failed to upload file dist to /datadrive/mnt/ai/web-admin/dist
 解决办法:需要添加一个-r参数表示复制该文件夹下的所有文件和目录,下面是一个示例
      sshpass -p ‘pwd’ scp -r -q -o StrictHostKeyChecking=no dist root@x.x.x.x:/web-admin/dist
17.jenkins的git拉取代码问题,stderr: fatal: not in a git directory
 直接进入容器执行:git config --global --add safe.directory ‘*’
18.Docker中apt-update遇到Err:1 http://deb.debian.org/debian bookworm InRelease
 Couldn’t create temporary file /tmp/apt.conf.8ESGGX for passing config to apt-key的解决方法
  进入容器执行:chmod 1777 /tmp
19.apt-get出现Package ‘ping‘ has no installation candidate解决
 apt-get install -y inetutils-ping

  9.Dockerfile和ssh脚本

 1.Dockerfile

# 指定是基于哪个基础镜像
FROM openjdk:8-jdk

# 作者信息
MAINTAINER wwj

# 挂载点声明
VOLUME /tmp

# 将本地的一个文件或目录,拷贝到容器的文件或目录里,这里注意目录结构,前面的是对应宿主机的目录
ADD ai-toc-service-1.0-SNAPSHOT.jar ai-toc-service-1.0-SNAPSHOT.jar

#shell脚本
RUN bash -c 'touch /ai-toc-service-1.0-SNAPSHOT.jar'

# 将容器的8222端口暴露,给外部访问。
EXPOSE 8222

ENV JVM_PARAMS = "-XX:MetaspaceSize=512m","-XX:MaxMetaspaceSize=512m","-Xms2048m","-Xmx2048m","-Xmn256m","-Xss256k","-XX:SurvivorRatio=8","-XX:+UseConcMarkSweepGC"

# 当容器运行起来时执行使用运行jar的指令
 ENTRYPOINT ["java","-Dserver.port=8222","-Dfile.encoding=utf-8","-jar","ai-toc-service-1.0-SNAPSHOT.jar","--spring.cloud.bootstrap.location=/datadrive/mnt/ai/ai-toc-service/config/bootstrap.yml","&"]

CMD ["${JVM_PARAMS}"]

 2.java-jenkins远程打包shell脚本

#!/bin/bash -ilex
cd /datadrive/software/docker-config/jenkins/jenkins_home/workspace/ai-statistics-service/ai-service/ai-statistics-service
sshpass -p 'pwd' scp -q -o StrictHostKeyChecking=no target/ai-statistics-service-1.0-SNAPSHOT.jar root@x.x.x.x:/datadrive/mnt/ai/ai-statistics-service/ai-statistics-service-1.0-SNAPSHOT.jar
echo "后端服务上传成功!"
sshpass -p 'pwd' ssh -tt root@x.x.x.x << EOF
echo '登录成功!准备执行命令'

cd /datadrive/mnt/ai/ai-statistics-service
docker rm -f ai-statistics-service
sleep 1
docker rmi -f ai-statistics-service:1.0
sleep 1
docker build -t ai-statistics-service:1.0 -f /datadrive/mnt/ai/ai-statistics-service/Dockerfile .
sleep 1
docker run -d \
-p 8224:8224 \
-v /datadrive/mnt/ai/ai-statistics-service/config/bootstrap.yml:/datadrive/mnt/ai/ai-statistics-service/config/bootstrap.yml \
-v /datadrive/mnt:/datadrive/mnt \
--name ai-statistics-service ai-statistics-service:1.0
exit

 3.java-jenkins-本地打包shell脚本

#!/bin/bash -il
cd /datadrive/software/docker-config/jenkins/jenkins_home/workspace/ai-statistics-service/ai-service/ai-statistics-service
docker rm -f ai-statistics-service
sleep 1
docker rmi -f ai-statistics-service:1.0
sleep 1
docker build -t ai-statistics-service:1.0 -f /datadrive/software/docker-config/jenkins/jenkins_home/workspace/ai-statistics-service/ai-service/ai-statistics-service/src/main/docker/Dockerfile .
sleep 1
docker run -d \
-p 8224:8224 \
-v /datadrive/mnt/ai/ai-statistics-service/config/bootstrap.yml:/datadrive/mnt/ai/ai-statistics-service/config/bootstrap.yml \
-v /datadrive/mnt:/datadrive/mnt \
--name ai-statistics-service ai-statistics-service:1.0

 4.vue-jenkins-远程打包shell脚本

#!/bin/bash -ilex
npm -v
node -v
npm i
rm -rf ./dist/*
#打包命令
npm run build:stage
#如果文件夹不存在,则创建文件夹,这个文件夹在宿主机
cd /datadrive/software/docker-config/jenkins/jenkins_home/workspace/web-admin
sshpass -p 'pwd' scp -r -q -o StrictHostKeyChecking=no dist root@x.x.x.x:/datadrive/mnt/ai/web-admin/dist
echo "后端服务上传成功!"
sshpass -p 'pwd' ssh -tt root@x.x.x.x << EOF
echo '登录成功!准备执行命令'
echo "*************打包成功****************"
exit

 5.vue-jenkins本地打包shell脚本

#!/bin/bash -ilex
npm -v
node -v
npm i
rm -rf /datadrive/software/docker-config/jenkins/jenkins_home/workspace/web-admin/dist
#打包命令
npm run build:stage
#如果文件夹不存在,则创建文件夹,这个文件夹在宿主机
cd /datadrive/software/docker-config/jenkins/jenkins_home/workspace/web-admin
sshpass -p 'pwd' scp -r -q -o StrictHostKeyChecking=no dist root@x.x.x.x:/datadrive/mnt/ai/web-admin
echo "后端服务上传成功!"
sshpass -p 'pwd' ssh -tt root@x.x.x.x << EOF
echo '登录成功!准备执行命令'
echo "*************打包成功****************"
exit

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

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

相关文章

DAY74

#ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include <QPainter> //画家类 #include <QTimer> //定时器类 #include <QTime> //时间类QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : …

风控——贷中管理介绍

一、概念介绍 贷中管理&#xff0c;指从贷款发放之日起&#xff0c;至贷款本息收回日期为止的贷款管理&#xff0c;贷中管理策略也集中在贷款发放后的管理和监控阶段&#xff0c;其目的是确保贷款资金的安全和有效使用&#xff0c;贷中预警和贷中调额在贷中管理中至关重要。 …

STMCuBeMX新建项目的两种匪夷所思的问题

错误一、保存地址名中有中文 错误&#xff1a;error1-haveCHinese_有中文\error1-haveCHinese_有中文.axf: error: L6002U: Could not open file error1-havechinese_???\stm32f1xx_it.o: No such file or directory 解决方法&#xff1a;重新导出&#xff0c;并且不要用中文…

Leetcode 701-二叉搜索树中的插入操作

给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和要插入树中的值 value &#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 &#xff0c;新值和原始二叉搜索树中的任意节点值都不同。 注意&#xff0c;可能存在多种有效的插入方式&a…

c# Avalonia 架构开发跨平台应用

Avalonia&#xff0c;读&#xff1a;阿瓦隆尼亚 由于以前的c#开发的windows平台项目想移植到信创平台&#xff08;UOS,Kylin)上&#xff0c;起初想用python重写&#xff0c;后来发现了这个Avalonia,用这个改动起来工作相对较少于是就先了解一下。 官网Avalonia Docs | Avalon…

贪心-单调递增的数字

给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff09; 示例 1: 输入: …

如何显示Dialog窗口

文章目录 1. 概念介绍2. 使用方法2.1 Overlay效果2.1 Dialog效果 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get显示snackBar"相关的内容&#xff0c;本章回中将介绍使用get显示Dialog.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在…

又一款强大好用的Shell脚本项目,支持Bash,Sh、Dash、Ksh等,甚至可以在编辑器中直接用,程序员必备!(附源码)

作为一个程序员&#xff0c;肯定经常都要和shell脚本打交道&#xff0c;Shell脚本可以帮我们自动化各种任务&#xff0c;但也经常有格式错误、拼写错误、逻辑错误等等麻烦&#xff0c;而且它不会告诉你错在哪里&#xff01; 今天就给大家分享一个超级实用的开源项目 - ShellCh…

Vue接入高德地图并实现基本的路线规划功能

目录 一、申请密钥 二、安装依赖 三、代码实现 四、运行截图 五、官方文档 一、申请密钥 登录高德开放平台&#xff0c;点击我的应用&#xff0c;先添加新应用&#xff0c;然后再添加Key。 如图所示填写对应的信息&#xff0c;系统就会自动生成。 二、安装依赖 npm i am…

Opencv中的直方图(3)直方图比较函数compareHist()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 比较两个直方图。 函数 cv::compareHist 使用指定的方法比较两个密集或两个稀疏直方图。 该函数返回 d ( H 1 , H 2 ) d(H_1, H_2) d(H1​,H2​…

el-form之表单校验自动定位到报错位置问题,,提升用户体验

需求描述 由于需要填写的表单项太多&#xff0c;提交的时候校验不通过&#xff0c;如果没填写的表单项在最上面&#xff0c;用户看不到不知道发生了啥&#xff0c;所以需要将页面滚动定位到第一个报错的表单项位置&#xff0c;提升用户体验 实现步骤 点击保存校验 报错项class会…

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…

基于BiLSTM-CRF的医学命名实体识别研究(下)模型构建

一.生成映射字典 接下来需要将每个汉字、边界、拼音、偏旁部首等映射成向量。所以&#xff0c;我们首先需要来构造字典&#xff0c;统计多少个不同的字、边界、拼音、偏旁部首等&#xff0c;然后再构建模型将不同的汉字、拼音等映射成不同的向量。 在prepare_data.py中自定义…

Vue 获取参数

Vue 获取参数 在Vue.js开发过程中&#xff0c;获取参数是处理用户输入和动态数据的关键环节。本文将深度解析Vue中获取参数的几种方法&#xff0c;并分享一些扩展与高级技巧&#xff0c;帮助你更高效地完成参数处理任务。 文章目录 Vue 获取参数 一、Vue获取参数包含哪些几种1.…

【无标题】nginx服务器代码信息、数据库连接信息、敏感文件的路径、服务器版本信息发起有针对性的攻击

Nginx敏感文件的路径、服务器版本信息 Nginx 403、404、500等错误时&#xff0c;返回详细错误信息。报错信息中可能会包含服务器代码信息、数据库连接信息、敏感文件的路径、服务器版本信息等&#xff0c;攻击者可以利用这些信息来寻找已知的漏洞&#xff0c;从而发起有针对性…

mybatis 查询Not Found TableInfoCache

近期在工程迁移中遇到一个mybatis查询的问题&#xff0c;检查代码没有问题&#xff0c;但是报Not Found TableInfoCache 解决过程 是不是数据库对应表错误或者实体类指定的表名错误 查看配置文件链接的数据源是否正确TableName中指定的表名然后去数据库看一下是否存在 如果…

spring揭秘19-spring事务01-事务抽象

文章目录 【README】【1】事务基本元素【1.1】事务分类 【2】java事务管理【2.1】基于java的局部事务管理【2.2】基于java的分布式事务管理【2.2.1】基于JTA的分布式事务管理【2.2.2】基于JCA的分布式事务管理 【2.3】java事务管理的问题 【3】spring事务抽象概述【3.1】spring…

MSSQL数据库安全配置

预备知识 1、数据库安全的概念 对任何企业组织来说,数据的安全性最为重要。安全性主要是指允许那些具有相应的数据访问权限的用户能够登录到数据库,并访问数据以及对数据库对象实施各种权限范围内的操作,但是要拒绝所有的非授权用户的非法操作。因此安全性管理与用户管理是…

pptpd配置文件/etc/pptpd.conf详解

正文共&#xff1a;1111 字 2 图&#xff0c;预估阅读时间&#xff1a;1 分钟 如果要在Linux系统配置PPTP&#xff08;Point-to-Point Tunneling Protocol&#xff0c;点到点隧道协议&#xff09;VPN&#xff0c;一般是使用pptpd软件。pptpd命令通常从配置文件/etc/pptpd.conf中…

6.第二阶段x86游戏实战2-理解程序流程

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提…