docker $PWD路径_Docker安装Jenkins+Shell脚本自动化部署项目

v2-b53cf0621d9c2be1d9a8d2a5a80e3d18_1440w.jpg?source=172ae18b
本文同名博客老炮说Java:https://www.laopaojava.com/,每天更新Spring/SpringMvc/SpringBoot/实战项目等文章资料

Sentinel+Nacos 是微服务环境搭建必不可少的两个组件,这里给大家推荐一套微服务教程:

SpringCloud微服务电商项目教程 - 老炮说Java-程序员编程资料和编程经验分享平台​www.laopaojava.com
v2-609fe1ae897599c7123f07592f8e2fe7_180x120.jpg

教程主要包含下面内容:

v2-fe37fa84116ac138b2ba106cd0b8431c_b.jpg

v2-2080fa91e631e6206740dc1c1fd9e561_b.jpg

Jenkins

Jenkins基于Java环境,可以部署在windows/Mac OS/linux上,通过其网页可视化界面可以轻松操作Jenkins。

接下我们会分成三部分来讲解:

  • docker安装Jenkins
  • Jenkins首次登录配置
  • 构建一个项目完成自动部署

docker安装Jenkins

我们在linux环境使用Docker安装一个Jenkins,你需要事先安装Docker和Docker-compose,如果不知道怎么安装可以看我的安装教程文章。

1.远程连接linux服务器,创建docker在主机的jenkins数据映射目录

cd /opt
mkdir jenkins
cd jenkins
mkdir home

2.(可选)给数据映射目录授权docker用户访问权限,不然docker启动jenkins时会报权限的错。如果指定了容器内以root用户运行的话,可以不用执行授权命令。

sudo chown -R 1000 home

jenkins容器内部的用户id是1000,而主机上home目默认是root用户才能访问,需要授权给jenkins容器用户。-R 代表home目录及其子目录一起授权。

3.我们用docker-compose安装,当然你也可以用docker run的方式,创建一个docker-compose.yml文件。

version: "3"
services:jenkins:image: jenkins/jenkins:ltsports:- 8080:8080- 50000:50000restart: "always"container_name: jenkinsenvironment:JAVA_OPTS: -Duser.timezone=Asia/Shanghaivolumes:- /opt/jenkins/home:/var/jenkins_home- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/bin/dockerprivileged: trueuser: root

官网中文文档与英文文档不一致,不要使用中文文档中推荐的jenkinsci/blueocean镜像,使用它构建node程序会出现问题,因为我的项目需要同时构建前端vue项目和后端springboot项目,所以我这里使用jenkins/jenkins:lts版本镜像。

(可选)最后一行的user:root指的是指定容器内部使用root账号,如果加了这行可以把第二步省略。可以通过docker exec -t jenkins bash命令进入到容器内部然后运行whoami命令查看当前用户。

注意其中我们映射了一个容器内的/var/jenkins_home目录,这是作为Jenkins的主目录,里面会存放Jekins的各种配置和构建的项目工作空间,后面需要用到这个对应的主机映射路径。映射的端口可以自行修改。

4.启动Jenkins容器

userdocker-compose up -d

安装就成功了,你可能看着很简单,其实这一步是最多坑的地方,第二步中的映射目录授权很多人没做导致报错排查了很久,docker-compose配置文件里有映射了几个目录如果没有后面也会让你头疼的。

Jenkins首次登录配置

1.首次登陆,解锁jenkins,启动完成后打开浏览器 ip:8080 。

v2-c4a503fa68f041058049fb4d2099dbb1_b.jpg

解锁Jenkins

获取密码,在服务器控制台运行以下命令查看密码,注意这里的目录是主机的目录/opt/jenkins/home,对应的是容器内的/var/jenkins_home目录。

cat /opt/jenkins/home/secrets/initialAdminPassword

2.自定义插件

不了解自己需要的插件的话选择安装推荐的插件,如果你是学习目的的话可以选择插件来安装。

v2-a0188d79a115de22c07cef778af94bdc_b.jpg

自定义插件

推荐安装插件界面

v2-6d591ddbca7609fc67f03d687b297e3f_b.jpg

推荐安装插件

选择插件安装页面

v2-9b2565e80e6e63a2270215226af050e3_b.jpg

选择插件安装

安装插件的过程比较久,慢慢等待。

3.创建一个管理员用户

安装完插件会出现创建管理员用户的界面。填写用户名和密码以及邮件地址即可。

v2-698fffaf27dfb764d22a3418a1a9f1f2_b.jpg

创建一个管理员用户

4.进入jenkins首页

默认有一些地方是英文的,你可以服务器重启下jenkins容器就可以变成中文了。

v2-dd5e270e685b21bb01b7f6e45e9ffb06_b.jpg

Jenkins首页

点击左侧的Manage Jenkins菜单,中文叫系统管理。下图红框中的三个分别是系统配置、全局工具管理、插件管理。Security部分可以管理凭据(新建项目时会讲到)。以后想装插件、配置用户、配置Jenkins的话都在这里操作。

v2-bc0bf9c832a75c1da2be15472bb2f373_b.jpg

系统管理

构建一个项目完成自动部署

1.新建项目

点击左侧新建Item菜单新建一个项目。

v2-94f40f4b6243918da34baa18194009f2_b.jpg

新建项目

输入任务(项目)名称,任务类型选择Freestrle project,中文的话叫自由风格的项目。

创建成功后可以看到任务里有很多的配置,一般我们配置源码管理(你的项目git路径、分支和账号)、构建(写构建shell脚本)就可以了。

v2-8832e9e4c152ff1f9fed7e5caa1e5fb9_b.jpg

项目配置页面

2.源码管理配置

我的项目在gitlab上,使用的是git,所以我们选择Git,输入项目的git地址。

v2-5b7fcc2845efe5f99de5b36bc9d13067_b.jpg

配置git地址

如果你的git仓库是私有的,会提示无法连接仓库,如下图。

v2-64eaf27f1a052172cfcaaae3687d8fb6_b.jpg

私有git仓库

这时我们就需要添加一个凭据,可以直接点git地址输入框下方的添加按钮,选择Jenkins默认域添加一个凭据。这一步也可以在系统管理里事先设置好。

v2-84dbdc9bab4a1f68b48f456b6ef5f157_b.jpg

添加凭据

在添加凭据的地方输入你的git上的账户名和密码点击添加即可。

v2-6f600d77ed943f1cc5ed76e1d429d9d7_b.jpg

添加凭据

指定分支,默认是 */master,这里我改成 */develop 。

v2-431a1e77d2da4daf95b256bc88a804af_b.png

指定分支

源码管理部分就可以了,接下去是设置构建步骤,我们跳到构建步骤。

3.构建配置

我们滚动到构建步骤部分,点击增加构建步骤,在下拉框中选择执行shell脚本。

v2-15d967d768d844cd101ae09fbdc7c1c6_b.jpg

执行shell脚本

shell脚本根据你的项目情况而定,我这里给出一个我的项目的脚本参考,因为我是同时构建前后端项目,所以比较复杂一点。注意这个shell脚本运行的当前路径是主机上的 /opt/jenkins/home/workspace/项目名 目录, 注意/opt/jenkins/home 目录是我对应jenkins容器里的/var/jenkins_home 目录。可以通过在脚本里写个$(pwd)然后构建日志中查看具体是什么。需要一定的shell知识,当然如果你不用shell脚本也是可以使用其他方式构建可以自行查阅。

dir=$(pwd)
echo "jenkins容器项目所在路径:"
echo $dir
echo "主机路径:"
real_dir="/opt/jenkins/home/"${dir#'/var/jenkins_home/'}
echo $real_direcho "开始构建"echo "创建前端代码打包脚本install.sh"
cat>web/install.sh<<EOF
sed -i "s@http://dl-cdn.alpinelinux.org/@https://repo.huaweicloud.com/@g" /etc/apk/repositories
apk update
apk add yarn
yarn config set registry https://registry.npm.taobao.org/
yarn && yarn build:dev
EOFecho "打包前端代码生成dist目录"
docker run --rm --net=host -v ${real_dir}/web:/web -v /root/.cache/yarn/cmp:/usr/local/share/.cache/yarn -w /web node:10-alpine3.11 sh install.shecho "拷贝前端dist目录到后端项目的public目录,用于与后端公用端口,解决跨域问题"
mkdir -p ./src/main/resources/public
cp -r ./web/dist/* ./src/main/resources/publicecho "后端构建"
mkdir -p /root/.m2echo "后端mvn打包jar文件"
docker run --rm -v /root/.m2:/root/.m2 -v ${real_dir}:/cmp -w /cmp maven mvn clean install -DskipTestsecho "复制jar文件到指定docker目录"
mkdir -p docker && cp target/cmp-0.0.1-SNAPSHOT.jar ./docker && cd dockerecho "在指定docker目录创建Dockerfile文件用于生成docker容器"
cat>Dockerfile<<EOF
FROM openjdk:8u242-jdk
COPY cmp-0.0.1-SNAPSHOT.jar /
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENTRYPOINT ["java", "-jar", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5008", "/cmp-0.0.1-SNAPSHOT.jar"]
EOFecho "清理已有容器及镜像资源"
container="Jenkins-project01"
image=${container}if docker ps | grep ${container} ;thendocker stop ${container}
fiif docker ps -a | grep ${container};thendocker rm ${container}
fiif docker images | grep ${image};thendocker rmi ${image}
fiecho "镜像制作"
docker build -t ${image} .
echo "容器运行"
docker run -d --restart=always --name ${container} -v /var/logs:/var/logs -p 8888:8888  ${image} --spring.profiles.active=dev -Duser.timezone=GMT+8

4.构建项目查看控制台信息

在任务页面点击立即构建,然后可以在下方的构建历史中点击右侧时间位置的小箭头打开控制台输出信息。

v2-aae96e72ae5ee996a539d5ce42280fa8_b.jpg

查看控制台输出

v2-92f84629ce227294906a8f0f09ca1f94_b.jpg

控制台内容

好了,以上就是Jenkins的全部内容了。

作者:程序员柳大侠http://toutiao.com/i6891617717334475271

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

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

相关文章

flyme Android7.0 root,手把手教你如何免ROOT卸载Flyme7系统自带APP

本教程需要使用adb&#xff0c;adb的全称为Android Debug bridge&#xff0c;就是起到调试桥的作用。借助adb工具&#xff0c;我们可以管理设备或手机模拟器的状态。本教程需要使用adb&#xff0c;adb的全称为Android Debug bridge&#xff0c;就是起到调试桥的作用。借助adb工…

C语言 -- 字符串中根据特定字符(串)分割

版权C语言字符串操作函数有很多&#xff0c;这里举出需要用到的&#xff0c;其他请自行查找。1、len strlen(p) &#xff1b;//取字符串长度 原型&#xff1a;size_t strlen(const char *s); 功能&#xff1a;统计字符串string中字符的个数&#xff0c;字符串的长度在 size_t…

javaone_JavaOne 2014:会议与合同利益冲突

javaone杜克街咖啡馆&#xff0c;工程师可以在街上进行走廊交谈 。 与签约不兼容 我的第11届JavaOne会议&#xff08;2004年至2014年为11 10 1&#xff09;非常出色。 值得参加此活动并结识社区中所有的人。 现在&#xff0c;这里是绅士的&#xff0c;但 。 除了经济上的明显…

什么流读取MultipartFile_深入理解并运用Node中的IO模型流

在 NodeJs 中&#xff0c;流随处可见&#xff0c;读/写文件流&#xff0c;HTTP请求/返回流&#xff0c;stdin/stdout流。理解并运用好流会让你的Node更具力量。Streamlib/_stream_readable.jslib/_stream_writable.jslib/_stream_tranform.jslib/_stream_duplex.js流主要有可读…

C 线程的创建

前言线程创建很容易&#xff0c;直接调用std::thread&#xff0c;就创建一个新线程了。该线程拿到任务后立即开始执行。线程的创建者&#xff08;父线程&#xff09;必须管理创建的线程&#xff08;子线程&#xff09;&#xff0c;应该等到子线程完成其任务或者让子线程从自己身…

apache karaf_未来是Apache Karaf上的微服务架构

apache karaf这是Jamie Goodyear的客座博客文章&#xff08; 博客 &#xff0c; icbts &#xff09;。 他是Savoir Technologies的开源倡导者&#xff0c;Apache开发人员和计算机系统分析师&#xff1b; 他为全球大型组织设计&#xff0c;批判和支持了体系结构。 他拥有纽芬兰…

AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?

知行EDI系统主要是用来实现贸易双方的数据交换的过程&#xff0c;这个过程中&#xff0c;贸易双方往往需要根据国际通用的消息格式收发信息&#xff0c;我们称符合国际规范的消息文件为EDI报文&#xff0c;然而不同的公司会结合ERP的接口情况选择不同的集成方式&#xff0c;例如…

指针函数和函数指针

概述指针函数和函数指针是C语言里两个比较绕的概念。但是不仅面试题爱考&#xff0c;实际应用中也比较广泛。很多人因为搞不清这两个概念&#xff0c;干脆就避而远之&#xff0c;我刚接触C语言的时候对这两个概念也比较模糊&#xff0c;特别是当指针函数、函数指针、函数指针变…

android显示绘图动画,Android自定义View绘图实现渐隐动画

实现了一个有趣的小东西&#xff1a;使用自定义view绘图&#xff0c;一边画线&#xff0c;画出的线条渐渐变淡&#xff0c;直到消失。效果如下图所示&#xff1a;用属性动画或者渐变填充(shader)可以做到一笔一笔的变化&#xff0c;但要想一笔渐变(手指不抬起边画边渐隐)&#…

python网络编程项目_python网络编程详解

最近在看《UNIX网络编程 卷1》和《FREEBSD操作系统设计与实现》这两本书&#xff0c;我重点关注了TCP协议相关的内容&#xff0c;结合自己后台开发的经验&#xff0c;写下这篇文章&#xff0c;一方面是为了帮助有需要的人&#xff0c;更重要的是方便自己整理思路&#xff0c;加…

分享10个值得关注的C语言开源项目

来源于网络&#xff0c;如有侵权&#xff0c;告知必删。

python3 x默认使用的编码_python3默认使用什么编码

python3默认编码为unicode&#xff0c;由str类型进行表示。二进制数据使用byte类型表示。 字符串通过编码转换成字节码&#xff0c;字节码通过解码成为字符串encode&#xff1a;str --> bytes&#xff08;推荐学习&#xff1a;Python视频教程&#xff09; decode&#xff1a…

html中写css代码,开发DIV CSS时 先写CSS代码还是先写HTML代码

相信良多&#xff2c;&#xff2f;&#xff36;&#xff25;用DIVCSS技术启示重构网页的爱好者友好&#xff0c;在起源学习DIVCSS的时分都邑想一个标题&#xff0c;想晓得DIVCSS妙手或有教育者在开发制作html页面的时刻&#xff0c;下场是先写html照样先写css&#xff1f;带着这…

象棋子 设计模式_通过设计国际象棋游戏了解策略模式

象棋子 设计模式今天&#xff0c;我们将借助一个示例来尝试了解策略模式。 我们将考虑的示例是国际象棋游戏。 这里的目的是解释策略模式&#xff0c;而不是构建全面的国际象棋游戏解决方案。 策略模式&#xff1a;策略模式被称为行为模式–用于管理对象之间的算法&#xff0…

入门C语言10问10答

1 如何理解变量与常量?变量与常量相当于数据的可读可写与只读&#xff0c;常量是数据的一种保护机制。在内存分配给程序的内存块中有专门的常量&#xff08;只读&#xff09;存储区。2 整型数据的溢出问题任何一种数据类型的数据在计算机中都有它确定的数值表示范围&#xff0…

mac json格式化工具_简洁好用的工具都是相似的

大家好&#xff0c;我是你们的章鱼猫。不知道大家了不了解 jq 这个工具呢&#xff1f;指的不是 JQuery&#xff0c;而是一个命令行工具。jq 是一个轻量级而且灵活的命令行 JSON 解析器&#xff0c;类似用于 JSON 数据的 sed 工具。我们来看一下使用 jq 处理 json 的基本用法(更…

战神4 幕后花絮 概念艺术_Java 9幕后花絮:新功能从何而来?

战神4 幕后花絮 概念艺术找出Java幕后发生的事情&#xff0c;以及新功能如何实现 在上一篇文章中&#xff0c;我们介绍了即将发布的Java 9版本的新功能和尚待解决的功能&#xff0c;并简要提到了将新功能添加到下一个版本之前要经历的过程。 由于此过程几乎影响了所有Java开发人…

ID生成器 雪花算法

背景&#xff1a;在很多业务场景下&#xff0c;我们都需要一个唯一的 ID 来进行一些数据的交互&#xff0c;那么如何生成这个唯一的 ID 呢&#xff1f;如果在单机的情况下&#xff0c;生成唯一ID&#xff0c;可以利用机器内存的特点&#xff0c;通过内存分配即可。但我们线上的…

python anaconda安装_Python - 安装并配置Anaconda环境

$ py --version # 当前默认python版本 Python 3.7.1 $ conda create --name testpy2 python2.7 pandas # 创建名为testpy2的运行环境&#xff0c;并安装pandas包及其依赖包 Solving environment: done ## Package Plan ## environment location: D:\DownLoadFiles\anaconda3\en…

jstack调试_增压的jstack:如何以100mph的速度调试服务器

jstack调试使用jstack调试实时Java生产服务器的指南 jstack就像U2一样-从时间的黎明就一直在我们身边&#xff0c;我们似乎无法摆脱它 。 除了笑话&#xff0c;到目前为止&#xff0c;jstack是您的工具库中用于调试实时生产服务器的最方便的工具之一。 即便如此&#xff0c;我仍…