jenkin部署(docker+gitlab)

第一部分 安装部署
1.1 gitlab安装部署
最小配置
- 内存至少4g,系统内核至少在3.10以上 uname -r 可查看系统内核版本
默认docker已经安装
1、安装gitlab 127机器
(1)添加容器
docker run -d --name gitlab --hostname 192.168.2.7 --restart always -p 443:443 -p 80:80 -v /data/docker/gitlab/config:/etc/gitlab -v /data/docker/gitlab/data:/var/opt/gitlab -v /data/docker/gitlab/logs:/var/log/gitlab --shm-size 256m registry.gitlab.cn/omnibus/gitlab-jh:latest
(2)启动容器
docker start gitlab
(3)查看已存在的容器
docker ps -a
(4)进入容器
docker exec -it gitlab /bin/bash
访问 http://192.168.2.7
管理员账号登录
用户名:root
密码存在下面文件中,
cat /etc/gitlab/initial_root_password
登录进入之后修改密码
1.2 gitlab上传代码
(1)创建一个空白项目

(2)在idea中创建springboot项目,在pom.xml同等级创建idea创建一个.gitignore文件来防止一些IDEA自动生成的代码被提交到Git仓库去
/target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
(3)将本地和远程仓库关联并push本地项目

选择项目路径
创建了git仓库之后,项目里所有文件都会变红(红色表示没有add到git的文件)

需要把项目add到git上,在idea打开项目后,右击项目,选择Git,选择Add即可。add之后,项目的文件会变成绿色

add之后,我们就可以commit 提交到本地仓库,右击项目,选择Git,选择Commit Directory即可,Commit之后文件就会变回正常的颜色了

commit项目之后,我们就可以将项目Push到gitlab远程仓库上了,选择VCS的Git,点击Push
第一次push,idea会让我们关联远程仓库,点击Define remote,在url填入我们gitlab仓库的url地址即可
这时候,不要马上push我们的项目,而是要先pull拉取远程分支到本地
如果我们pull项目时出现refusing to merge unrelated histories
思是拒绝合并不相关的历史,出现这个问题的最主要原因还是在于本地仓库和远程仓库实际上是独立的两个仓库。假如我之前是直接clone的方式在本地建立起远程github仓库的克隆本地仓库就不会有这问题了。
我们可以在pull命令后紧接着使用–allow-unrelated-history选项来解决问题(该选项可以合并两个独立启动仓库的历史)。
1、进入项目根目录,进入git命令窗口
2、输入:git pull origin master --allow-unrelated-histories
1.3 jenkins及依赖 安装部署 126机器
需要jdk、maven
参考:https://blog.csdn.net/ZHANGLIZENG/article/details/123653860
1.3.1 安装jdk
(1)以1.8为例
检索可用的包
yum search java |grep jdk

安装
yum install java-1.8.0-openjdk
查看jdk版本
java version
(2)以上的openjdk实际只是安装了jre用来jenkins安装用,还需要上传jdk
上传。上传1.8linux版本到服务器

解压
tar -zxvf jdk-8u221-linux-x64.tar.gz
在环境变量中配置jdk
vi /etc/profile
向配置文件中添加jdk的安装目录

按esc退出编辑
让配置生效
source /etc/profile
查看版本java version
1.3.2 maven安装
https://maven.apache.org/download.cgi 下载最新版maven
(1)上传maven安装包到linux服务器

解压文件,创建目录maven
tar -zxvf apache-maven-3.6.3-bin.tar.gz
创建文件夹
cd /usr/local
mkdir maven
cd maven
mv /home/soft/apache-maven-3.6.3/ .
(2)创建存放jar包的目录repo,需要与下面setting.xml中配置的一致
cd /usr/local/maven
mkdir repo
chmod 777 repo
(3)修改maven的setting.xml配置信息
cd /usr/local/maven/apache-maven-3.6.3/conf
vi settings.xml

修改为阿里镜像
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
如果有私服
配置私服的serviers
<servers>
<server>
<id>umapp-rs</id>
<username>Nexus umapp</username>
<password>`Qihoo360!</password>
</server>
</servers>
配置maven私服nexus及激活的配置
<profiles>
<profile>
<id>umapp</id>
<repositories>
<repository>
<id>umapp-rs</id>
<name>Nexus umapp</name>
<url>http://xxx:port/nexus/content/repositories/umapp/</url>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<!--make the profile active all the time -->
<activeProfile>umapp</activeProfile>
</activeProfiles>
(4)把maven安装信息配置进环境变量中
vi /etc/profile
把maven信息加进去保存并退出(wq):
export M2_HOME=/usr/local/maven/apache-maven-3.6.3
export PATH=$M2_HOME/bin:$PATH

(4)重新加载环境变量
source /etc/profile
查看maven是否加载
mvn -v
1.3.3 git安装
执行安装命令
yum install git
查看安装git是否成功
git --version
1.3.4 jenkins安装 war形式
选择合适版本的war包https://mirrors.jenkins.io/war-stable/

将war上传到服务器,切换到目录下,使用运行
java -jar jenkins.war
或者脚本启动
vim startjk.sh
#!/bin/bash
java -jar /usr/local/jenkins/jenkins.war --httpPort=8080 --enable-future-java &2> jenkins.log
脚本关闭
vim stopjk.sh
#!/bin/bash
ps -ef |grep -v grep | grep jenkins | awk '{print $2}' | xargs kill -s 9 >/dev/null 2>&1


开启防火墙
firewall-cmd --permanent --zone=public --add-port=8080/tcp
重启防火墙
systemctl reload firewalld
访问 http:192.168.2.6:8080

账号:root执行命令查看密码
cat /var/lib/jenkins/secrets/initialAdminPassword
登录系统,插件安装选择推荐插件


(1)进入之后,全局工具配置,添加如下配置




(2)安装maven构建项目插件


(3)构建一个简单的maven项目



然后保存构建


去jenkins机器上查看打包情况

然后执行
java -jar xxxx.jar
访问对应的地址:http:192.168.2.6:9889 得到页面

1.4 自动化发布到测试服务器并运行
服务器有限,先用126服务器
(1)安装插件 publish over ssh


(2)配置远程服务器,也就是部署的服务器,dashboard ->manage jenkins -> configreSystem 找到Publish over SSH 点击新增

点击高级,勾选

其他默认,点击test configuration测试,成功后保存

(3)修改项目中的post steps

进入后点击左侧配置-->post steps,选择刚刚配置的服务器host1

设置Transfers里面的选项
- 设置Source files 对应的是部署jenkins服务器的/root/.jenkins/workspace/

因此设置source file路径为

如下设置

1.5 容器化构建的几种方式

第一种方式,直接jenkins拉取打包后传到发布服务器,使用命令在发布服务器上运行
第二种方式,传到发布服务器后,将路径挂载在docker下,当访问docker下的某个目录时会映射到该路径,然后docker启动该容器即可。(这种方式在清理时,需要清理宿主主机路径下的jar即可)
第三种方式,把jar包直接打包到docker镜像中,生成镜像运行,适合于云原生,需要清理docker镜像
第四种方式,需要能给连接私服,一台服务器只做构建,使用dcokerfile生成镜像推送到habor私服,k8s集群拉取habor镜像,生成多个容器部署在集群环境
(1)第二种方式:docker外挂目录(了解)
实验:
- 1、准备一台测试服务器docker环境
- 2、准备支持jdk镜像
- 3、将jar包打包到容器
在jar包的目录下,编写一个dockerfile文件
#拉取jdk镜像
FROM openjdk:8
EXPOSE 9889
#工作目录
WORKDIR /root
ADD eurekaServe*.jar /root/app.jar
ENTRYPOINT ["java","-jar","/root/app.jar"]

在dockerfile所在目录构建镜像
# .表示当前目录下构建名为demo的镜像
docker build -t demo .

注意:dockerfile中的COPY 和 ADD 命令不能拷贝上下文之外的本地文件,在设置了 WORKDIR 命令后,接下来的 COPY 和 ADD 命令中的目标相对路径就是相对于 WORKDIR 指定的路径,上面的ADD eurekaServe.jar /root/app.jar表示当前目录下的eurekaServe.jar添加到docker容器的 /root下为app.jar

或者使用如下命令直接挂载启动
docker run -d -p 9889:9889 --name demo-out -v /root/springProject/eurekaServe-1.0-SNAPSHOT.jar:/app.jar openjdk:8 java -jar app.jar
第三种方式,在jenkin中使用项目中的dockerfile构建镜像
在项目中编写dockerfile文件,上传到gitlab

(1)在jenkins的pre steps中清理dockerfile、jar包、镜像和容器
编辑项目选中的pre steps


注意:上面的强制删除镜像可以使用
docker image rm -f xxxxx
(2)在post steps中构建和run
再添加一个transfer set


点击保存,重新点击jenkin按钮测试

查看发布服务器

1.6 blue ocean与pipeline流水线
参考:https://blog.csdn.net/weixin_39947101/article/details/107448285
(1)流水线pipeline
流水线技能作为任务本身,也能作为jenkinsfile
使用流水线可以让我们的任务从ui手动操作,转为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,也可以编辑开发jenkinswebui不能完成的更复杂的构建逻辑,作为开发者可读性也更好
5个必备的组成部分
pipeline:整条流水线
agent:指定执行器
stages:所有阶段
stage:某一阶段,可能有多个
steps:阶段内的每一步,可执行命令
创建一个简单流水线




(2)blue ocean用来观察流水线的ui,在插件中心进行下载

安装成功后点击进入


(3)使用pinple自动打包docker镜像
- 写流水线脚本,自动生成流水线脚本


- 1、拉取git阶段,点击生成流水线

将流水线脚本粘贴到项目对应流水线
pipeline {
agent any
stages {
stage('拉取代码') {
steps {
git credentialsId: '0bbc7386-a703-47d1-8f95-4b682a84d11e', url: 'http://192.168.2.7/gitlab-instance-06bf96c0/eureka-serve.git'
echo '拉取代码成功'
}
}
stage('执行构建') {
steps {
echo '执行构建成功'
}
}
stage('发送到测试服务器') {
steps {
echo '发送到测试服务器成功'
}
}
}
}
- 2执行构建,(1)在脚本中声明maven,jenkins中配置的maven:manage jenkins -> global tool configuration -> maven。(2)执行多行脚本命令"""xxxx"""(3)项目构建在了jenkins服务器的/root/.jenkins/workspace/

pipeline {
agent any
tools {
maven "maven3.6.2"
}
stages {
stage('拉取代码') {
steps {
git credentialsId: '0bbc7386-a703-47d1-8f95-4b682a84d11e', url: 'http://192.168.2.7/gitlab-instance-06bf96c0/eureka-serve.git'
echo '拉取代码成功'
}
}
stage('执行构建') {
steps {
sh"""
// cd testP
mvn clean package
"""
echo '执行构建成功'
}
}
stage('发送到测试服务器') {
steps {
echo '发送到测试服务器成功'
}
}
}
}
- 3、项目发布到测试服务器
(1) 生成流水线脚本



将生成的脚本复制
pipeline {
agent any
tools {
maven "maven3.6.2"
}
stages {
stage('拉取代码') {
steps {
git credentialsId: '0bbc7386-a703-47d1-8f95-4b682a84d11e', url: 'http://192.168.2.7/gitlab-instance-06bf96c0/eureka-serve.git'
echo '拉取代码成功'
}
}
stage('执行构建') {
steps {
sh"""
mvn clean package
"""
echo '执行构建成功'
}
}
stage('发送到测试服务器') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'host1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/jarfile', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/eurekaServe*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /root/jarfile
docker build -t demo .
docker run -d -p 9889:9889 --name demo demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/jarfile', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '发送到测试服务器成功'
}
}
}
}
(2)清理脚本


复制到流水线
pipeline {
agent any
tools {
maven "maven3.6.2"
}
stages {
stage('拉取代码') {
steps {
git credentialsId: '0bbc7386-a703-47d1-8f95-4b682a84d11e', url: 'http://192.168.2.7/gitlab-instance-06bf96c0/eureka-serve.git'
echo '拉取代码成功'
}
}
stage('执行构建') {
steps {
sh"""
mvn clean package
"""
echo '执行构建成功'
}
}
stage('清理远程服务器') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'host1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''rm -rf *
docker stop demo
docker rm demo
docker rmi demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/root', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '清理远程服务器成功'
}
}
stage('发送到测试服务器') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: 'host1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/jarfile', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/eurekaServe*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /root/jarfile
docker build -t demo .
docker run -d -p 9889:9889 --name demo demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/jarfile', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
echo '发送到测试服务器成功'
}
}
}
}
第二部分 后续补充
1、最新版本jenkins需要jdk问题
参考:https://blog.csdn.net/leilei1366615/article/details/127347906
(1)Jenkins为docker安装,镜像为jenkins/jenkins:lts-jdk11

(2)兼容jdk8项目
核心思路:下载Linux版本jdk8解压到jenkins工作目录下,页面配置jdk8路径,项目打包时指定jdk版本
1、jdk8下载
下边是我的百度云链接
链接:https://pan.baidu.com/s/1EU0zQXLZShBek6I-hUg1Sg
提取码:jdk8
2、将jdk包解压至jenkins工作目录挂载的宿主机位置
之前我们将jenkins容器工作目录/var/jenkins_home 挂载到了宿主机/home/jenkins_data目录下

解压jdk
tar -zxvf jdk-8u221-linux-x64.tar.gz

3、jenkins页面配置jdk8
Dashboard >系统管理>全局工具配置>jdk

点击最下方进行保存
4、jdk版本选择插件下载

5、项目指定jdk版本
选择参数化构建过程,找到 JDK Parameter

需要注意的是,以后必须要为每一个任务指定jdk版本,如果需要使用jdk8的则指定jdk8,如果项目需要使用jdk11,则需要指定版本为 Default
jenkin部署(docker+gitlab)的更多相关文章
- docker+gitlab+gitlab-runner部署
环境 服务端:centos7 客户端:window 在centos7上部署docker+gitlab+gitlab-runner,win10利用ssh连接,开发人员只需提交代码,就可以进行项目文件上传 ...
- Docker Gitlab CI 部署 Spring Boot 项目
目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...
- Docker+GitLab+Jenkins+kubernetes实现DevOps 持续化集成和持续化部署概念图
Docker+GitLab+Jenkins+kubernetes实现DevOps 持续化集成和持续化部署概念图 转载自:原创 IT综合 作者:百联达 时间:2017-05-09 15:48:08 41 ...
- 部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了
部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Do ...
- docker gitlab迁移 备份 部署 搭建以及各种问题
当前环境 服务器A 服务器B ubuntu docker gitlab(版本一致) docker安装gitlab 由于考虑到gitlab 包含了⾃身的nginx.数据库.端⼝占⽤等等因数,这⾥使⽤的是 ...
- 阿里云部署Docker(7)----将容器连接起来
路遥知马力.日久见人心.恩. 该坚持的还是要坚持. 今天看到一个迅雷的师弟去了阿里,祝福他,哎,尽管老是被人家捧着叫大牛.我说不定通过不了人家的面试呢.哎,心有惭愧. 本文为本人原创,转载请表明来源: ...
- docker gitlab backup
说明:下面命令中带有<your container name>字,是 gitlab 容器的名称,请按实际情况进行代替 在创建备份之前,你不需要停止任何东西 docker exec -t & ...
- 将 maven repo 部署到 Gitlab
为什么要将 maven repo 部署到 Gitlab 将 Maven artifacts 放在对应的项目仓库下,而不是专门再去建一个 Maven 仓库.这么做使用起来更方便,更易于管理. 借助 Gi ...
- Linux下部署docker记录(0)-基础环境安装
以下是centos系统安装docker的操作记录 1)第一种方法:采用系统自带的docker安装,但是这一般都不是最新版的docker安装epel源[root@docker-server ~]# wg ...
- docker gitlab
Alternatively, you can manually launch the gitlab container and the supporting postgresql and redis ...
随机推荐
- 如何基于G6进行双树流转绘制?
1. 背景 业务背景:CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加,各个条线的流向规则会越来越复杂,各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达. 技术背景:在开发之前 ...
- 【Python&GIS】矢量数据投影转换(WGS84转地方坐标系)
又是掉头发的一天,今天的任务是将WGS84坐标系的点转成地方坐标系,并判断点是否在某个面内,找了半天的资料什么四参数.七参数啥的太复杂了.这里使用Python的ogr, osr库内置的坐标转 ...
- ChatGPT玩法(三):AI玩转PPT
前言 在线免费体验ChatGpt:https://www.topgpt.one 作为许多职场人士的必备工具,PPT制作一直是一个琐碎而费时的任务.但最近我发现了一个非常有用的工具网站,它可以通过人工智 ...
- 三分钟免费将 Claude API 接入个人服务
首先我们介绍一下今天的主角 Claude Claude 是最近新开放的一款 AI 聊天机器人,是世界上最大的语言模型之一,比之前的一些模型如 GPT-3 要强大得多,因此 Claude 被认为是 Ch ...
- MQ系列13:消息大量堆积如何为解决
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...
- 前端Vue非常简单实用商品分类展示组件 侧边商品分类组件
前端vue非常简单实用商品分类展示组件 侧边商品分类组件 , 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id=13084 效果图如下 ...
- 【技术积累】Spring Boot中的基础知识【一】
写在前面 笔者在学校里学习Spring项目的时候,基本上都是老师照着书念PPT,然后演示一些有限的课堂案例,笔者印象很深刻,学校里整个Spring项目也就做了留个课堂练习,而且难度基本上属于连接上数据 ...
- Hexo博客Next主题相册搭建
参考文章,小红鸡 参考文章,主题美化 效果展示:相册 在blog文件夹/source下创建photos文件夹,在photos文件夹创建index.md文件,编辑index.md文件,写入以下代码: & ...
- 模型部署 — PaddleNLP 基于 Paddle Serving 快速使用(服务化部署 - Docker)— 图像识别 + 信息抽取(UIE-X)
目录 流程 版本 安装 Docker 安装 PaddleNLP 安装 环境准备 模型准备 压缩模型 下载模型 模型部署 环境配置 启动服务 测试 -- 暂时还没通过 重启 图像识别 + 信息抽取(UI ...
- tmux 移动窗格
pre + Ctrl+o:所有窗格向前移动一个位置,第一个窗格变成最后一个窗格 pre + Shift+[:当前窗格与上一个窗格交换位置 pre + Shift+]:当前窗格与下一个窗格交换位置