还在手动部署jar包吗?快速掌握Jenkins安装,教你使用Jenkins实现持续交付
Jenkins
- Jenkins:
- 开源软件项目
- 基于Java开发的一种持续集成工具
- 用于监控持续重复的工作
- 旨在提供一个开放易用的软件平台, 便于软件的持续集成
基于Docker安装Jenkins
与持续集成中的GitLab Runner应该分布在不同的服务器上
- 创建工作目录: /usr/local/docker/jenkins
- 因为要在docker-compose.yml中使用volumes创建数据卷,执行命令赋予Docker数据卷权限:
chown -R 1000 /usr/local/docker/jenkins/data
- 在/usr/local/docker/jenkins创建docker-compose.yml
version: '3.1'
services:
jenkins:
restart: always
image: jenkins
container_name: jenkins
ports:
# 发布端口
- 8080:8080
# 基于JNLP的Jenkins代理通过TCP端口50000与Jenkins master进行通信
- 50000:50000
environment:
TZ: Asia/shanghai
volumes:
- ./data:/var/jenkins_home
- 执行docker-compose.yml文件启动Jenkins:
docker-compose up -d
- 解锁Jenkins: Jenkins第一次启动时需要输入初始密码解锁安装流程,使用命令查看初始密码
docker logs jenkins
- 使用自定义插件的方式安装Jenkins:
Dashboard View
Publish Over SSH
Extend Choice Parameter
也可以在Jenkins运行界面中的Manage Jekins中的Manage Plugins自定义下载安装
配置Jenkins
配置JDK&Maven
- 上传JDK和Maven的tar包到服务器(容器的数据卷目录)
- Manage Jekins -> Global Tool Configuration
- 安装JDK,注意: JAVA_HOME的路径是宿主机目录:(宿主机是相对宿体而言的)
/var/jenkins_home/jdk1.8.0_152
- 安装Maven,注意: MAVEN_HOME的路径是宿主机目录:(宿主机是相对宿体而言的)
/var/jenkins_home/apache-maven-3.5.3
安装动态参数插件(Extend Choice Parameter)
- 目的是方便在做项目构建时按照版本进行构建
- 支持一键回滚
使用Jenkins实现持续交付
- Jenkins持续交付流程与GitLab Runner持续集成流程类似,只是GitLab Runner默认已经配置好Git,Jenkins需要配置多一个GitLab的SSH登录
- Jenkins持续交付流程:
- 拉取代码
- 打包构建
- 上传镜像
- 运行容器
- 维护清理
配置Jenkins的GitLab SSH免密登录
- 交互式进入Jenkins容器
docker exec -it jenkins /bin/bash
- 生成 SSH KEY
ssh-keygen -t rsa -C "email@example.com"
- 查看公钥
cat /var/jenkins_home/.ssh/id_rsa.pub
- 复制公钥到GitLab
- 克隆项目获取到known_hosts文件
配置Publish Over SSH
在Jenkins管理页面中系统设置增加SSH Server配置
- Name
测试环境-192.168.32.255
- Hostname
192.168.32.255
- Username
root
- Remote Directory(宿主机中可操作的目录)
/usr/local/jenkins
- 高级:Password
123456
- 高级:Port
22
- 高级:Timeout(ms)
300000
持续交付依赖管理项目
第一步是实现所有项目的父工程依赖项目的持续交付
- 项目创建标签: 在GitLab中给项目创建标签(版本号)
- 创建Maven Project: 在Jenkins中新建一个基于Maven的任务
- 配置Maven Project: 配置第一次构建初始化
- General: 丢弃旧的构建
- 源码管理: Git
- Repository URL: ssh://git@192.168.32.255:8000/myshop/myshop-dependencies.git
- Branches to build: */master
- 第二次配置Maven Project开始使用
- General: 参数化构建过程
- Extended Choice Parameter:
- name: RELEASE_VERSION
- Basic Parameter Types: Parameter Type
- Choose Source for Value:
- Groovy Script
def var_key=['bash','-C','cd/var/jenkins_home/workspace/myshop-dependencies;git pull >/dev/null;git remote prune origin>/dev/null;git tag -l|sort -r |head -10']
var_key.excute().text.tokenize('\n')
- Extended Choice Parameter:
- 源码管理: none
- Post Steps: Add post-build step
- Excute shell
echo $RELEASE_VERSION
cd /var/jenkins_home/workspace/myshop-depedencies
git checkout $RELEASE_VERSION
git pull origin $RELEASE_VERSION
mvn clean package
- Add post-build step: Send files or execute commands over SSH
- SSH Publishers:
- SSH Server:
- name: 测试环境-192.168.32.255
- Transfers:
- Source files: **/*.jar, docker/ **(远程传送文件)
- (Remove prefix): target(删除远程传送过程中前缀为target的文件,只适用于在上传过程中删除,不会删除已经上传成功到远程服务器上的文件)
- Remote Directory: myshop-service-user-provider(远程创建目录,并把文件远程传送到此目录中)
- Exec command (在远程服务器进行命令操作:进入provider目录,拷贝项目jar包到docker目录,进入docker目录,构建项目jar包的镜像,上传镜像,停止容器,启动容器,清理虚悬镜像)
cd /usr/local/jenkins/myshop-service-user-provider
cp target/myshop-service-user-provider-1.0.0-SNAPSHOT.jar docker
cd docker
docker build -t 192.168.32.133:5000/myshop-service-user-provider:v1.0.0
docker push 192.168.32.133:5000/myshop-service-user-provider:v1.0.0
docker-compose down
docker-compose up -d
docker image prune -f
- SSH Server:
- SSH Publishers:
- General: 参数化构建过程
- 保存
- Build with Parameters
还在手动部署jar包吗?快速掌握Jenkins安装,教你使用Jenkins实现持续交付的更多相关文章
- Maven 手动添加 JAR 包到本地仓库
Maven 确确实实是个好东西,用来管理项目显得很方便,但是如果是通过 Maven 来远程下载 JAR 包的话,我宿舍的带宽是4兆的,4个人共用,有时候用 Maven 来远程下载 JAR 包会显得很慢 ...
- 手动下载jar包导入mvn repo的方法
转载自:http://www.360doc.com/content/19/1101/16/67125028_870487351.shtml 常用Maven仓库网址:http://mvnreposito ...
- Maven deploy部署jar包到远程私仓
Maven deploy部署jar包到远程私仓 maven deploy介绍 maven中的仓库分为两种,snapshot快照仓库和release发布仓库.snapshot快照仓库用于保存开发过程中的 ...
- centos7后台服务部署jar包
centos7 服务部署jar包 centos7 服务介绍 CentOS7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分, 每一个 ...
- 手动添加jar包到本地maven仓库
我们都知道使用maven管理jar包的时候,我们需要到远程仓库下载相关的jar包到本地仓库,但是如果远程仓库没有这个jar包呢?这时候我们就需要手动将jar包添加到本地仓库. 起因是我想用百度的富文本 ...
- 转 Maven常用仓库地址以及手动添加jar包到仓库
转自:http://blog.csdn.net/kqygww/article/details/12837783 共有的仓库 http://repository.sonatype.org/content ...
- Maven常用仓库地址以及手动添加jar包到仓库
http://www.blogjava.net/fancydeepin 共有的仓库 http://repository.sonatype.org/content/groups/public/http: ...
- maven 下载 jar 包速度慢时,可以自己手动下载 jar 包,然后粘贴到 External Libraries 中
maven 下载 jar 包速度慢时,可以自己手动下载 jar 包,然后粘贴到 External Libraries 中
- Maven还停留在导jar包?快来探索Nexus私服的新世界
写在前面 Maven,学习框架之前我们都会接触到的一个工具,感觉他的定位,似乎就跟git一样,只是方便我们开发?于是自然而然的,很多小猿对于Maven都只是停留在会用的阶段,利用他来构建,打包,引入j ...
随机推荐
- Caused by: java.lang.RuntimeException: JxBrowser license check failed: No valid license found
使用jxbrower报错,原因时证书检验失败, 解决方案: 1.首先创建证书,下面是我在IDEA maven项目中创建的位置,Java项目中在src/目录下创建, META-INF/teamdev.l ...
- 一种3位sar adc仿真验证
3位sar adc采用下图的电容阵列,电路如下图:所有电容的正端(也称为上极板)与比较器的同相端连接,比较器反相端接gnd,其工作过程进行大致分析见之前的文章<一种3位sar adc工作过程推导 ...
- python那些需要知道的事儿——内存泄漏
啥,内存也会泄露?漏了咋补?我的内存会不会越漏越小?咋一听到内存泄漏,本喵的脑子蹦出无数想法,所以到底啥是内存泄漏! 一.垃圾回收机制(GC)机制 在理解内存泄漏之前,需要补充一个知识,即GC机制(也 ...
- 阿里最强 Python 自动化工具开源了!
1. 前言 大家好,我是安果! 最近,阿里内部开源了一个 iOS 端由 Python 编写的自动化工具,即:tidevice 它是一款跨平台的自动化开源工具,不依赖 Xcode 就可以启动 WebDr ...
- 仅仅使用Google就完成了人生第一次破解
2021年2月6日21:17:09 begin 起因 在异乡的打工人,不善言谈,幸有一老同学,周末常邀吃饭,感恩之心铭记于心.她结婚时,为表心意欲做视频,视频需要制作字幕,搜索之,偶遇一字幕软件,但是 ...
- 记录给树莓派刷Raspberry Pi OS(Raspbian)系统的配置流程
准备材料 树莓派(一定要贴散热片,最好再加个小风扇) TF内存卡 (记得选传输规范为Class10标准的) 读卡器 电脑(这里我使用的电脑是Windows系统,其它系统可能与下面的步骤有出入,还望悉知 ...
- java面试-生产环境出现CPU占用过高,谈谈你的分析思路和定位
思路:结合Linux和JDK命令一起分析 1.用top命令找出CPU占比最高的进程 2.ps -ef|grep java|grep -v grep 或者jps -l进一步定位,得知是怎样一个后台程序惹 ...
- MzzTxx——团队介绍
项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-团队介绍 我在这个课程的目标是 提升工程能力和团队意识,熟悉软件开发的流程 这个作业在哪 ...
- [源码分析] 分布式任务队列 Celery 之 发送Task & AMQP
[源码分析] 分布式任务队列 Celery 之 发送Task & AMQP 目录 [源码分析] 分布式任务队列 Celery 之 发送Task & AMQP 0x00 摘要 0x01 ...
- redhat7.6 更换 centos7 YUM
使用yum 遇到如下错误. This system is not registered to Red Hat Subscription Management. You can use subscrip ...