当前位置: 首页 > news >正文

docker部署jenkins和jenkins的基本使用

docker部署jenkins和jenkins的基本使用

  • 运行jenkins
  • 初始配置
    • 设置中文
    • 安装插件
    • 配置
  • 创建任务
    • 构建jar
    • 构建容器
  • CI/CD
  • 官仓构建

运行jenkins

docker pull jenkins/jenkins
docker run -d \-u root --privileged=true \-p 8080:8080 \-p 50000:50000 \-v /root/jenkins:/var/jenkins_home \-v /etc/localtime:/etc/localtime \-v /var/run/docker.sock:/var/run/docker.sock \-v /usr/bin/docker:/usr/bin/docker \--name=jenkins \jenkins/jenkins 

初始配置

设置中文

Manage Jenkins ->Manage Plugins -> 可选插件 -> 输入“Locale” -> 勾选并点击安装 -> http://主机ip:8080/restart” -> 重启;

重启后 -> Manage Jenkins -> Configure System -> Locale -> 输入“zh_CN” -> 点击保存和应用。

或者直接安装中文插件:搜索chinese。

安装插件

安装需要用到的插件。若安装插件较慢,可以更换源;若安装插件失败,可以尝试更换版本。

  • Maven Integration plugin: Maven 集成管理插件。
  • Docker plugin: Docker集成插件。
  • GitLab Plugin: GitLab集成插件。
  • Publish Over SSH:远程文件发布插件。
  • SSH: 远程脚本执行插件。

配置

系统管理 -> 全局工具配置 -> 找到Jdk、Git、Maven和docker。

配置好jdk、git、maven和docker的名称、路径等内容。

jdk容器中自带;git可以勾选自动安装;maven同样可以勾选自动安装;docker已经映射了本地的。

创建任务

构建jar

创建一个自由风格的软件项目 -> 填好git仓库地址和用户后 -> 添加maven构建,内容为“clean install -Dmaven.test.skip=true [-f pom.xml]” -> 保存 -> 点击build now即可开始自动拉取代码构建为jar包。

由于第一次构建去才会去自动下载maven,而maven的默认源很慢,可以先取消构建,修改为阿里的源后,在重新启动任务。

<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url>
</mirror>

构建容器

1、在项目中加上依赖:

<plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.4.13</version><configuration><!--镜像名称有三部分组成:<registry>/<repository>:<tag>,tag默认为latest--><!--仓库名称--><repository>${project.artifactId}</repository><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration>
</plugin>

2、在pom.xml同级目录下添加Dockerfile文件。

# 设置JAVA版本
#FROM openjdk:8	#新版docker用这个
#FROM  java:8-alpine #旧版docker用这个,更轻量
#新版用java:8-alpine的方法:
FROM ningbiluoer/java-alpine
# 拷贝运行JAR包
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# 设置JVM运行参数, 这里限定下内存大小,减少开销
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"
#空参数,方便创建容器时传参
ENV PARAMS=""
# 入口点, 执行JAVA运行命令
ENTRYPOINT java -jar $JAVA_OPTS /app.jar $PARAMS
# 通过脚本执行
#ENTRYPOINT ["/tmp/start.sh"]

3、创建自由风格项目,源码管理选择git,填上项目地址和凭证。

4、添加构建步骤,类型为Invoke top-level Maven targets:选择maven版本和填上目标内容为:

clean install -Dmaven.test.skip=true dockerfile:build [-f pom.xml]

注意:根据自己的实际代码路径配置

-Dmaven.test.skip=true 跳过测试

dockerfile:build 启动dockerfile插件构建容器

-f heima-leadnews-user/pom.xml 指定需要构建的文件(必须是pom)

5、添加构建步骤,类型为Execute shell

注:JOB_NAME为任务名称,由于构建出来的镜像名称被repository标签指定为了项目的artifactId,所以任务名称要和artifactId一样。

if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
# 清理无用镜像
docker image prune -f 
docker run -d --net=host -e --name $JOB_NAME $JOB_NAME# 启动docker服务
#docker run -d --net=host -e PARAMS="--spring.profiles.active=prod"  --name $JOB_NAME $JOB_NAME

CI/CD

前面两步和构建容器中的构建容器部分一样。

3、系统管理 -> 系统配置 -> SSH remote hosts

注:ssh添加不了凭据,需要先到 系统管理 -> credentials 里创建凭据,填上远程服务器的用户名和密码。

4、在General里勾选This project is parameterized,添加string类型的参数,名称为docker_registry,填上私有仓库的地址和端口。

5、创建自由风格项目,源码管理选择git,填上项目地址和凭证。

6、添加构建步骤,类型为Invoke top-level Maven targets:选择maven版本和填上目标内容为:

clean install -Dmaven.test.skip=true dockerfile:build [-f pom.xml]

7、添加构建步骤,类型为Execute shell

注:JOB_NAME为任务名称,由于构建出来的镜像名称被repository标签指定为了项目的artifactId,所以任务名称要和artifactId一样。

image_tag=$docker_registry/$JOB_NAME
echo '================docker镜像清理================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
fi
# 清理无用镜像
docker image prune -f 
# 创建TAG
docker tag $JOB_NAME $image_tag
echo '================docker镜像推送================'
# 推送镜像
docker push $image_tag
# 删除TAG
echo '================docker tag 清理 ================'
docker rmi $image_tag

8、添加构建步骤,类型为Execute shell script on remote host using ssh

echo '================拉取最新镜像================'
docker pull $docker_registry/$JOB_NAMEecho '================删除清理容器镜像================'
if [ -n  "$(docker ps -a -f  name=$JOB_NAME  --format '{{.ID}}' )" ]
then
#删除之前的容器
docker rm -f $JOB_NAME
fi
# 清理无用镜像
docker image prune -f 
echo '===============启动容器================'
docker run -d --net=host --name $JOB_NAME $docker_registry/$JOB_NAME#echo '===============启动容器================'
#docker run -d   --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/$JOB_NAME

官仓构建

使用官方仓库进行CI/CD。

步骤基本与上节CI/CD一样,第4步的参数名称改为version,值为版本号。

本地shell修改为:

登录官方账号时报错:WARNING! Using --password via the CLI is insecure. Use --password-stdin。该错旧版无,登录成功后,密码会经过base64编码保存在$HOME/.docker/config.json的auth属性中,使用该命令echo 'auth值' | base64 --decode即可看到明文密码。

image_name="chat"
image_tag="ningbiluoer/$image_name"
echo '================构建镜像================'
# 清理无用镜像
docker image prune -f 
# 创建TAG
docker tag $image_name $image_tag:$version
echo '================推送镜像================'
# 推送镜像(需先登录官方docker账号)
docker push $image_tag:$version
echo '================推送完成================'
docker rmi $image_tag:$version

远程shell改为:

image_name="chat"
image_tag="ningbiluoer/$image_name"
echo '================清理容器================'
if [ -n  "$(docker ps -a -f  name=$image_name  --format '{{.ID}}')" ]
then
#删除之前的容器
docker rm -f $image_name
#删除镜像
docker rmi $(docker images --filter=reference=$image_tag --format='{{.ID}}')
fi
# 清理无用镜像
docker image prune -f 
echo '================拉取镜像================'
docker pull $image_tag:$version
echo '===============启动容器================'
docker run -d -p 32380:32380 --name $image_name $image_tag:$version

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【SpringCloud】SpringCloudNetflix笔记
  • 重塑购车体验,实时云渲染赋能东风日产探路云看车新体验
  • Date类型的字段序列化成JSON字符串
  • bug: 配置flyway.locations多个脚本位置不生效
  • SpringBoot整合支付宝沙箱支付流程(干货·精简版)Java毕业设计亮点 通俗易懂
  • Linux查看系统线程数
  • Python 爬虫项目实战五:抓取天猫超市商品信息
  • 数据结构 - 哈希表
  • 【C++进阶学习】第十二弹——C++ 异常处理:深入解析与实践应用
  • linux命令:scp与rsync
  • 关闭Windows安全中心
  • 个人编程原则总结(不喜勿喷)
  • 前缀和处理数组区间之和问题
  • Vue3项目创建及相关配置
  • C++ primer plus 第17 章 输入、输出和文件:文件输入和输出02:流状态检查和is_open():打开多个文件:命令行处理技术
  • 自己简单写的 事件订阅机制
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 《深入 React 技术栈》
  • Objective-C 中关联引用的概念
  • October CMS - 快速入门 9 Images And Galleries
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • python学习笔记-类对象的信息
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Redis字符串类型内部编码剖析
  • underscore源码剖析之整体架构
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 回流、重绘及其优化
  • 基于Android乐音识别(2)
  • 基于游标的分页接口实现
  • 实现菜单下拉伸展折叠效果demo
  • 移动端唤起键盘时取消position:fixed定位
  • puppet连载22:define用法
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​渐进式Web应用PWA的未来
  • (1)Nginx简介和安装教程
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (libusb) usb口自动刷新
  • (十) 初识 Docker file
  • (十)Flink Table API 和 SQL 基本概念
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)甲方乙方——赵民谈找工作
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • ****三次握手和四次挥手
  • ../depcomp: line 571: exec: g++: not found
  • .a文件和.so文件
  • .bat批处理出现中文乱码的情况
  • .env.development、.env.production、.env.staging
  • .gitignore文件设置了忽略但不生效