第一部分 安装部署

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)的更多相关文章

  1. docker+gitlab+gitlab-runner部署

    环境 服务端:centos7 客户端:window 在centos7上部署docker+gitlab+gitlab-runner,win10利用ssh连接,开发人员只需提交代码,就可以进行项目文件上传 ...

  2. Docker Gitlab CI 部署 Spring Boot 项目

    目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...

  3. Docker+GitLab+Jenkins+kubernetes实现DevOps 持续化集成和持续化部署概念图

    Docker+GitLab+Jenkins+kubernetes实现DevOps 持续化集成和持续化部署概念图 转载自:原创 IT综合 作者:百联达 时间:2017-05-09 15:48:08 41 ...

  4. 部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了

    部署基于Gitlab+Docker+Rancher+Harbor的前端项目这一篇就够了 安大虎 ​ momenta 中台开发工程师 6 人赞同了该文章 就目前的形势看,一家公司的运维体系不承载在 Do ...

  5. docker gitlab迁移 备份 部署 搭建以及各种问题

    当前环境 服务器A 服务器B ubuntu docker gitlab(版本一致) docker安装gitlab 由于考虑到gitlab 包含了⾃身的nginx.数据库.端⼝占⽤等等因数,这⾥使⽤的是 ...

  6. 阿里云部署Docker(7)----将容器连接起来

    路遥知马力.日久见人心.恩. 该坚持的还是要坚持. 今天看到一个迅雷的师弟去了阿里,祝福他,哎,尽管老是被人家捧着叫大牛.我说不定通过不了人家的面试呢.哎,心有惭愧. 本文为本人原创,转载请表明来源: ...

  7. docker gitlab backup

    说明:下面命令中带有<your container name>字,是 gitlab 容器的名称,请按实际情况进行代替 在创建备份之前,你不需要停止任何东西 docker exec -t & ...

  8. 将 maven repo 部署到 Gitlab

    为什么要将 maven repo 部署到 Gitlab 将 Maven artifacts 放在对应的项目仓库下,而不是专门再去建一个 Maven 仓库.这么做使用起来更方便,更易于管理. 借助 Gi ...

  9. Linux下部署docker记录(0)-基础环境安装

    以下是centos系统安装docker的操作记录 1)第一种方法:采用系统自带的docker安装,但是这一般都不是最新版的docker安装epel源[root@docker-server ~]# wg ...

  10. docker gitlab

    Alternatively, you can manually launch the gitlab container and the supporting postgresql and redis ...

随机推荐

  1. Kubernetes(k8s)使用ingress发布服务

    目录 一.系统环境 二.前言 三.Kubernetes ingress简介 四.Ingress vs NodePort vs LoadBalancer 五.安装部署Nginx Ingress Cont ...

  2. 10.1. Java性能调优

    Java性能调优是一个复杂且重要的主题,它涉及到了JVM.垃圾收集器.内存管理.多线程.代码优化等多个方面.在本节中,我们将对Java性能调优的基本概念和方法进行简要介绍. 10.1.1. 理解性能指 ...

  3. Vue_Django 登录注册+图书管理系统

    Vue前端 注册页面 点击查看代码 <template> <div class="register"> <el-row :gutter="2 ...

  4. Vulhub靶场的搭建

    Vulhub靶场的搭建(基于centos7) 1>简述 很多人在搭建Vulhub靶场的时候,可能也搜到过许多的文章,但是大多数的文章只是有一个流程,对其中的原理,步骤没有进行详细的说明,这也就导 ...

  5. 【城南 · LlamaIndex 教程】一文看懂LlamaIndex用法,为LLMs学习私有知识

    我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」(全网平台同名)~ 担任某大厂的算法工程师,带来最新的前沿AI知识,分享 AI 有趣工具和实用玩法,包括 ChatGPT.AI绘图等,欢迎大家交流~ ...

  6. Set 接口及其常用方法

    Set 接口基本介绍 Set接口是Collection接口的一个子接口,其主要特点如下: 不允许重复元素:Set接口的实现类不会包含重复的元素.更正式地说,不包含任何一对使得e1.equals(e2) ...

  7. 微型神经网络库MicroGrad-基于标量自动微分的类pytorch接口的深度学习框架

    一.MicroGrad MicroGrad是大牛Andrej Karpathy写的一个非常轻量级别的神经网络库(框架),其基本构成为一个90行python代码的标量反向传播(自动微分)引擎,以及在此基 ...

  8. ASP.NET Core 6框架揭秘实例演示[41]:跨域资源的共享(CORS)花式用法

    同源策略是所有浏览器都必须遵循的一项安全原则,它的存在决定了浏览器在默认情况下无法对跨域请求的资源做进一步处理.为了实现跨域资源的共享,W3C制定了CORS规范.ASP.NET利用CorsMiddle ...

  9. 在 Arch 配置 i3-wm 终端模拟器 xterm

    在 Arch 配置 i3-wm 终端模拟器 xterm 关于怎么在 Arch 安装 i3-wm 可以查看上一篇文章 https://www.cnblogs.com/shadow-/p/17572589 ...

  10. 工作笔记--简单网线连接,使另一台设备通过笔记本电脑的wifi上网

    条件 笔记本电脑能够通过 wifi 上网 另一台与笔记本电脑网线连接正常 配置固定 ip,使之可以互相 ping 通 操作 点击右下角 wifi 图标,点击[网络和 Internet 设置] 在高级网 ...