jenkins CI/CD持续集成/交付/部署

文章目录

  • 1.引言
  • 2.CI介绍(持续集成)
  • 3.实现持续集成
    • 3.1.搭建Gitlab服务器
    • 3.2.搭建Gitlab服务器
    • 3.3 整合项目入门测试
      • 编写一个springboot项目test-ci
      • 编写.gitlab-ci.yml文件
    • 3.4 编写.gitlab-ci.yml文件,实现持续集成
    • 3.5 删除名称为none的image
  • 4.CD介绍(持续交付、持续部署)
  • 5.实现持续交付和持续部署
    • 5.1安装jenkins
    • 5.2 配置目标服务器(shh登录方式)
    • 5.3 配置Jenkins免密码登录Gitlab
    • 5.4配置maven和jdk
    • 5.5 手动拉取Gitlab项目
  • 6.新建jenkins任务
    • 6.1配置项目git路径
    • 6.2配置登录git的用户名密码
    • 6.3配置maven及命令
    • 6.4配置远程服务器路劲和脚本
    • 6.5 保存执行构建
    • 访问测试:成功


参考文件:Docker、CICD持续集成部署、Gitlab使用、Jenkins介绍

1.引言

目前的项目部署:
​ 1.将项目进行编译打包,生产发布文件
​ 2.将文件上传到指定的服务器中
​ 3.将发布文件放到tomcat中
​ 4.通过DokcerfIle将其转为一个镜像,由dokcer-compose运行和管理容器

如果项目更新了,则需要将上面的流程化操作再次的从头到尾执行一次。

2.CI介绍(持续集成)

持续集成:编写代码时,完成了一个功能后,立即提交代码到Git仓库中,将项目重新构建并测试。

  • 快速发现错误
  • 防止代码偏离主分支

3.实现持续集成

3.1.搭建Gitlab服务器

1.创建一个全新虚拟机,并且制定至少4GB运行内存
2.安装docker以及docker-compose
3.docker-compose.yml文件去安装Gitlab
在/opt目录下创建docker_gitlab目录,将下面的docker-compose.yml文件放在此目录下。

安装gitlab的yml文件代码如下,注意:ip地址需要改为本机ip地址

version: '3.1'
services:
  gitlab:
    image: 'twang2218/gitlab-ce-zh:11.1.4'
    container_name: 'gitlab'
    restart: always
    privileged: true
    hostname: 'gitlab'
    environment:
      TZ: 'Asia/Shanghai'
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.229.132'	# 访问地址
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['gitlab_shell_ssh_port'] = 22
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
    volumes:
      - /opt/docker_gitlab/config:/etc/gitlab
      - /opt/docker_gitlab/data:/var/opt/gitlab
      - /opt/docker_gitlab/logs:/var/log/gitlab
    deploy: 
	  resources:
	    limits:
	      memory: 1024M

上面文件中,Gitlab服务器需要使用22端口号,但是该端口号被我们的ssh终端连接端口占用,因此我们需要修改ssh的22端口号为60022,保证Gitlab服务正常使用。

修改/etc/ssh/sshd_config文件中ssh的端口号配置,默认为22并且注释,我们将其取消注释并且修改为60022即可,然后使用sudo systemctl restart sshd命令重启ssh服务即可。

使用下面命令运行docker-compose,构建Gitlab服务器。

docker-compose up -d

执行结果如下:

Pulling gitlab (twang2218/gitlab-ce-zh:11.1.4)...
11.1.4: Pulling from twang2218/gitlab-ce-zh
8ee29e426c26: Already exists
6e83b260b73b: Already exists
e26b65fd1143: Already exists
40dca07f8222: Already exists
b420ae9e10b3: Pull complete
a218309dd589: Pull complete
5c60fd7ba0ce: Pull complete
659c2144b5a3: Pull complete
8289bbac0d0e: Pull complete
31bbd150e8a7: Pull complete
9114e78243fa: Pull complete
0b97fa2153bc: Pull complete
308c7e15be6a: Pull complete
b7f31b8e487d: Pull complete
cbbb6dec5000: Pull complete
0241c9ad6a16: Pull complete
7fa6f0b53edd: Pull complete
1c2861e152b2: Pull complete
0536f3466f66: Pull complete
Digest: sha256:3c2372e3285e6d6933ddebb5ee3ae0c4bbf7cb235084e54d33d7f0ddf4813c4a
Status: Downloaded newer image for twang2218/gitlab-ce-zh:11.1.4
Creating gitlab ... done # 表示创建成功

安装成功之后可以使用下面地址访问Gitlab,第一次访问时需要输入初始密码,由于我们在创建Gitlab服务器时开启了smtp服务,因此可以使用邮件发送功能。

external_url 'http://192.168.254.129'	# 访问地址

登录的用户名默认为root,密码默认为初始我们自己设置的密码,创建用户,登陆后主页如下所示:
jenkins CI/CD持续集成/交付/部署_第1张图片

3.2.搭建Gitlab服务器

我们这里使用Docker镜像的方式安装、运行Gitlab Runner,使用下面命令从仓库中获取Gitlab Runner对应的镜像,镜像获取时时间较长,可能需要多次重试或者等待。

#慢
docker pull gitlab/gitlab-runner:latest

由于镜像速度比较慢,因此采用直接在服务器安装的方式使用,这里以centos7为例介绍Gitlab Runner的安装、与Gitlab服务器中项目的关联。

使用下面的命令添加Gitlab的官方仓库地址。

# 快
sudo curl -L --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64"

chmod +x /usr/local/bin/gitlab-runner

cd /usr/local/bin/gitlab-runner

useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

gpasswd -a gitlab-runner docker

newgrp docker

#将目录配置为系统环境变量:/usr/local/bin
export PATH=/usr/local/bin:$PATH
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

sudo gitlab-runner start

#查看版本
gitlab-runner --version

安装完成,下面我们进行注册,与Gitlab中的指定项目绑定

在Gitlab中创建一个名为test-ci的项目,参考文档地址https://docs.gitlab.com/runner/register/index.html。
jenkins CI/CD持续集成/交付/部署_第2张图片
安装时,最好将Gitlab与Gitlab Runner安装在不同的服务器上面。
使用下面的命令启动Gitlab Runner的注册流程。

#准备上图的url 与 token
url: http://192.168.229.132/
token: zmUVQy5HmgowU1rzMeoB

#如图,需要输入的地方

jenkins CI/CD持续集成/交付/部署_第3张图片
此时,Gitlab Runner已经配置完毕,与Gitlab中的项目进行绑定。

刷新Gitlab中项目的设置-CI/CD页面,展开Runner对应的模块,可以查看对应的Runner已经与其绑定。

jenkins CI/CD持续集成/交付/部署_第4张图片
jenkins CI/CD持续集成/交付/部署_第5张图片
jenkins CI/CD持续集成/交付/部署_第6张图片
编辑当前的信息,选中【运行没有标签的作业】属性,然后保存更改,此属性表示此Runner可以运行没有任何标签的作业。
jenkins CI/CD持续集成/交付/部署_第7张图片
至此,Gitlab Runner已经安装完成,并且与Gitlab中的一个项目进行绑定。

3.3 整合项目入门测试

编写一个springboot项目test-ci

并且推送至gitlab
git初始化项目并且推送,略

编写.gitlab-ci.yml文件

在项目中添加持续集成使用的yml文件,在项目根节点文件夹右键 New -> File,添加文件名为[.gitlab-ci.yml],一定要注意文件名以[.]开始。

在[.gitlab-ci.yml]文件中添加下面代码:

stages:
  - test

test:
  stage: test
  script:
    - echo First test CI

如图:
jenkins CI/CD持续集成/交付/部署_第8张图片
再次提交,推送到git:http://192.168.229.132/biejihao/test-ci.git

此时在Gitlab项目的CI-CD -> [流水线] 功能下将会出现一个流水线执行情况,之后的每一次Git提交将会触发此自动执行命令,执行的脚本为我们之前编写的[.gitlab-ci.yml]文件中的代码,但是我们在执行时发现执行运行中,如下图所示:
jenkins CI/CD持续集成/交付/部署_第9张图片
如果是运行失败,可能是没有jdk环境

如下图,没有指定gitlab-runner,原因是最初指定runner后,项目有过删除记录。
jenkins CI/CD持续集成/交付/部署_第10张图片
流水线启动失败:需要安装git
jenkins CI/CD持续集成/交付/部署_第11张图片

#本机安装:
yum install -y git

3.4 编写.gitlab-ci.yml文件,实现持续集成

使用Gitlab Runner进行自动化编译时,实在Gitlab Runner服务器对应gitlab-runner用户下的builds目录下对应的文件夹内执行的命令,下面为从用户根目录至与Gitlab关联项目执行命令的全部目录:

zgs@zgs:/home/gitlab-runner$ ls
builds
zgs@zgs:/home/gitlab-runner$ cd builds/
zgs@zgs:/home/gitlab-runner/builds$ ls
0269f504
zgs@zgs:/home/gitlab-runner/builds$ cd 0269f504/
zgs@zgs:/home/gitlab-runner/builds/0269f504$ ls
0
zgs@zgs:/home/gitlab-runner/builds/0269f504$ cd 0/
zgs@zgs:/home/gitlab-runner/builds/0269f504/0$ ls
root
zgs@zgs:/home/gitlab-runner/builds/0269f504/0$ cd root/
zgs@zgs:/home/gitlab-runner/builds/0269f504/0/root$ ls
test-ci  test-ci.tmp
zgs@zgs:/home/gitlab-runner/builds/0269f504/0/root$ cd test-ci
zgs@zgs:/home/gitlab-runner/builds/0269f504/0/root/test-ci$ ls
pom.xml  web

在该目录下,我们可以使用 mvn -v 查看对应maven的版本号相关内容,如下所示:

zgs@zgs:/home/gitlab-runner/builds/0269f504/0/root/test-ci$ mvn -v
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 1.8.0_252, vendor: Private Build, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.4.0-42-generic", arch: "amd64", family: "unix"

下载maven并配置环境变量

#通过wget下载有问题,在官网下载后上传到linux。
#官网下载:https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz

# 解压
tar -zxvf apache-maven-3.8.5-bin.tar.gz

#修改目录名
mv apache-maven-3.8.5 /usr/local/maven/

# 配置环境变量
vim /etc/profile

MAVEN_HOME=/usr/local/maven
PATH=${MAVEN_HOME}/bin:${PATH}
export PATH

# 刷新
source /etc/profile

# 查看
mvn -v

# 替换maven源
vim /usr/local/maven/conf/settings.xml

# 找到<mirrors>mirrors>标签对,添加以下内容,中央仓库和指定下载位置
<mirror>
   <id>alimavenid>
    <name>aliyun mavenname>
    <url>http://maven.aliyun.com/nexus/content/groups/public/url>
    <mirrorOf>centralmirrorOf>
	<releases>
		<enabled>trueenabled>
        <updatePolicy>alwaysupdatePolicy>
    releases>
    <snapshots>
		<enabled>trueenabled>
        <updatePolicy>alwaysupdatePolicy>
    snapshots>
mirror>

# settings.xml中指定下载源位置
<localRepository>/usr/local/maven/repositorylocalRepository>

但是我们执行命令时实在Gitlab服务器中执行的,因此需要复制maven命令的全路径进行执行,安装maven时的路径如下:

/usr/local/maven/bin

修改.gitlab-ci.yml文件,修改后内容如下:

stages:
  - test

test:
  script:
    - echo first test ci
    - /usr/local/maven/bin/mvn package

注意:如果前后端不分离的项目要打包成war包,需要修改pom.xml文件,添加web.xml项目文件路径,代码如下:


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.zgsgroupId>
    <artifactId>testciartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>warpackaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-war-pluginartifactId>
                <version>2.1.1version>
                <configuration>
                    <webXml>src/main/web/WEB-INF/web.xmlwebXml>
                configuration>
            plugin>
        plugins>
    build>

project>

如出现如下情况,本机8080端口被占用,停止就可以了。
jenkins CI/CD持续集成/交付/部署_第12张图片
将此改动推送至Gitlab仓库,查看CI的流水线执行情况如下:
jenkins CI/CD持续集成/交付/部署_第13张图片
修改.gitlab-ci.yml文件中内容,添加将编译后文件复制到docker目录下代码,修改后文件内容如下:

stages:
  - test

test:
  stage: test
  script:
    - echo First test CI
    - /usr/local/maven/bin/mvn package
    - cp target/testci-0.0.1-SNAPSHOT.jar docker/testci.jar

编写Dockerfile文件内容如下

FROM java:8

COPY target/*.jar /app.jar

CMD ["--server.port=8099"]

EXPOSE 8099

ENTRYPOINT ["java","-jar","/app.jar"]

在项目根目录下创建docker-compose.yml文件,用于管理Docker镜像和容器,代码如下:

version: '3.8'
services:
  testci:
    build:
      dockerfile: Dockerfile
    image: testci
    restart: always
    container_name: testci
    ports:
      - "8099:8099"
#  redis:
#    image: "redis:alpine"

再次修改.gitlab-ci.yml文件,添加docker-compose相关命令,用于使用docker-compose命令管理容器,修改后代码如下:

stages:
  - test

test:
  stage: test
  script:
    - echo First test CI
    - /usr/local/maven/bin/mvn package
    #- cp target/testci-0.0.1-SNAPSHOT.jar /testci.jar
    - docker-compose down
    - docker-compose up -d --build

提交至代码仓库,在Gitlab中查看流水线作业已经执行成功。
测试访问。如果访问不到,确认镜像是否成功,容器是否启动成功,端口是否映射成功。
jenkins CI/CD持续集成/交付/部署_第14张图片

3.5 删除名称为none的image

使用docker images 命令查看宿主机的所有镜像发现有很多名称为none的镜像,是因为我们在执行docker-compose命令时,会将旧的镜像置为none,然后生成新的镜像。

在我们之后越来越多的提交就会进行多次构建,也就会产生多个名称为none的镜像,这样将会产生硬盘空间的极大浪费,我们可以使用下面的命令将这些名称为none的镜像删除,命令如下:

我们可以将该命令写入.gitlab-ci.yml文件中,每次将会把之前名称为none的镜像删除,完善后的.gitlab-ci.yml文件如下:

stages:
  - test

test:
  script:
    - echo first test ci
    - /usr/share/maven/bin/mvn package
    - cp target/testci-1.0-SNAPSHOT.war docker/testci.war
    - docker-compose down
    - docker-compose up -d --build
    - docker rmi -f $(docker images -qf dangling=true)

4.CD介绍(持续交付、持续部署)

持续交付:将代码交付给专业的测试团队进行测试。

持续部署:将测试通过的代码,发布到生产环境。

jenkins CI/CD持续集成/交付/部署_第15张图片

5.实现持续交付和持续部署

5.1安装jenkins

官网:https://www.jenkins.io/

docker安装jenkins:https://www.jenkins.io/zh/blog/2018/12/10/the-official-Docker-image/

使用docker-compose进行安装:

version: '3.1'
services:
  jenkins:
    image: jenkins/jenkins
    restart: always
    container_name: jenkins
    ports:
      - 8888:8080 # Web管理使用
      - 50000:50000 # Jenkins内部通讯使用端口
    volumes:
      - ./data:/var/jenkins_home

在/opt目录下创建docker_jenkins目录,并将上面的yml文件放在该目录下。/opt/docker_jenkins

执行下面命令使用docker-compose获取Jenkins镜像。

docker-compose up -d

执行完毕后,可以使用docker ps命令查看当前运行的容器,Jenkins容器已经正常运行。

zgs@zgs:/opt/docker_jenkins$ docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                          PORTS                                                          NAMES
8e1d33e74317        jenkins/jenkins                 "/sbin/tini -- /usr/…"   51 seconds ago      Restarting (1) 15 seconds ago                                                                  jenkins
027f38b36a87        test-ci_testci                  "catalina.sh run"        16 hours ago        Up 3 hours                      0.0.0.0:8080->8080/tcp                                         testci
f174354636b5        twang2218/gitlab-ce-zh:11.1.4   "/assets/wrapper"        3 days ago          Up 3 hours (healthy)            0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   gitlab

但是我们使用docker-compose的日志查看命令查看Jenkins的启动情况时,发现存在权限问题,具体日志如下:

zgs@zgs:/opt/docker_jenkins$ docker-compose logs -f
Attaching to jenkins
jenkins    | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
jenkins    | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
jenkins    | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
jenkins    | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
jenkins    | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

这是因为/opt/docker_jenkins/data目录Jenkins是没有操作权限的,那么我们要给Jenkins赋予对应的操作权限,对应代码如下:

zgs@zgs:/opt/docker_jenkins$ pwd
/opt/docker_jenkins
zgs@zgs:/opt/docker_jenkins$ ls
data  docker-compose.yml
zgs@zgs:/opt/docker_jenkins$ sudo chmod 777 data/
[sudo] password for zgs: 
zgs@zgs:/opt/docker_jenkins$ ll
total 16
drwxr-xr-x 3 root root 4096 Jul 25 02:00 ./
drwxr-xr-x 5 root root 4096 Jul 25 01:51 ../
drwxrwxrwx 2 root root 4096 Jul 25 02:00 data/
-rw-r--r-- 1 root root  267 Jul 25 01:53 docker-compose.yml
zgs@zgs:/opt/docker_jenkins$ docker-compose restart
Restarting jenkins ... done

查看对应的日志,如果出现下面的内容则说明启动成功:

jenkins    | *************************************************************
jenkins    | *************************************************************
jenkins    | *************************************************************
jenkins    | 
jenkins    | Jenkins initial setup is required. An admin user has been created and a password generated.
jenkins    | Please use the following password to proceed to installation:
jenkins    | 
jenkins    | 891836a4b38447219f937e599dd415b9
jenkins    | 
jenkins    | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
jenkins    | 
jenkins    | *************************************************************
jenkins    | *************************************************************
jenkins    | *************************************************************
jenkins    | 
jenkins    | 2020-07-25 12:22:53.442+0000 [id=25]	INFO	jenkins.InitReactorRunner$1#onAttained: Completed initialization
jenkins    | 2020-07-25 12:22:53.486+0000 [id=19]	INFO	hudson.WebAppMain$3#run: Jenkins is fully up and running
jenkins    | 2020-07-25 12:22:54.241+0000 [id=39]	INFO	h.m.DownloadService$Downloadable#load: Obtained the updated data file for hudson.tasks.Maven.MavenInstaller
jenkins    | 2020-07-25 12:22:54.246+0000 [id=39]	INFO	hudson.util.Retrier#start: Performed the action check updates server successfully at the attempt #1
jenkins    | 2020-07-25 12:22:54.282+0000 [id=39]	INFO	hudson.model.AsyncPeriodicWork#lambda$doRun$0: Finished Download metadata. 51,356 ms

访问下面地址可以访问Jenkins站点:

http://192.168.229.132:8888/login?from=%2F

按照页面提示,将下面的位置的文件中获取初始密码填入页面中。

/var/jenkins_home/secrets/initialAdminPassword

上面的目录为docker容器内的路径,这里我们映射到了宿主机的data文件夹中,具体路径如下:

/opt/docker_jenkins/data/secrets/initialAdminPassword

其实,在刚在查看Jenkins启动日志时已经将对应的密钥显示在了日志中。

输入完密码后,需要等待一段时间,Jenkins进行初始化启动。

#删除docker安装的jenkins:
1.停止容器 :docker stop 容器id
2.删除容器 :docker rm 容器id
3.删除卷挂载目录

点击【选择插件来安装】,除默认选择的插件外需选择自定义的插件安装,选择安装的插件如下列表:

Git Parameter
Publish Over SSH

然后点击安装按钮
jenkins CI/CD持续集成/交付/部署_第16张图片
等待安装完成
jenkins CI/CD持续集成/交付/部署_第17张图片
然后系统执行安装操作,需要等待一段时间,快则1-2个小时,慢则1-2天,安装期间可以使用docker-compose logs -f查看安装日志,前提为进入到Jenkins对应的docker compose文件夹内执行。

插件安装完成后,创建第一个管理员用户。
jenkins CI/CD持续集成/交付/部署_第18张图片
用户名:[email protected]
密码:Aa729941382
全名:biejiahao
邮箱:[email protected]

默认用户:admin
用户密码:7b796a87e6f444d9bebb1eeb8be81e91

配置实例,可以使用默认的URL地址。
jenkins CI/CD持续集成/交付/部署_第19张图片
jenkins CI/CD持续集成/交付/部署_第20张图片
jenkins CI/CD持续集成/交付/部署_第21张图片
看到上面的界面则证明Jenkins已安装成功。

5.2 配置目标服务器(shh登录方式)

程序代码 -> Gitlab -> Jenkins -> 目标部署服务器

Jenkins连接目标部署服务器
在这里我们配置将生成的目标文件部署至对应服务器中,配置步骤如下。

安装publish over ssh插件,用来连接jenkins客户端

jenkins CI/CD持续集成/交付/部署_第22张图片
在Jenkins页面中选在 系统管理 -> 系统配置,如下图所示:

在【系统配置】功能页面向下查找到【Publish over SSH】部分,如下图所示:
jenkins CI/CD持续集成/交付/部署_第23张图片
填写如下信息,注意remote Directory路径本机需要创建。
jenkins CI/CD持续集成/交付/部署_第24张图片
jenkins CI/CD持续集成/交付/部署_第25张图片
在【SSH Servers】点击【新增】按钮,【添加Gitlab服务器的SSH登录信息】,点击【高级】按钮可以配置更多的登录信息,我们这里配置的是密码和端口号,配置完成后可以点击【Test Configuration】按钮对配置的登录信息进行测试。
jenkins CI/CD持续集成/交付/部署_第26张图片
其中:remote Directory:/usr/local/jenkins(如果不存在则需要创建)

测试失败:多数连接不上的问题是:登录centos的账号密码错误
jenkins CI/CD持续集成/交付/部署_第27张图片

5.3 配置Jenkins免密码登录Gitlab

原理是将Jenkins容器内部的SSH密码配置到Gitlab服务器的SSH中,这样就可以实现免登录功能。

首先,通过下面命令进入到Jenkins容器内部。

#查看容器id
docker ps;
#进入容器
docker exec -it 容器id /bin/bash
#生成秘钥
ssh-keygen -t rsa -C "[email protected]" #空回车3下 
----------------------------------------
jenkins@e4e438826333:/usr$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa): 
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:pa3UwVOnLc/NA0rMbVOB+QdZqxeyP3mawX+8ZgL4AUA 729941382@qq.com
The key's randomart image is:
+---[RSA 3072]----+
|      .E    . +=o|
|       . .o..*+ .|
|        . =+o*o+ |
|         *.oo+*+o|
|        S =. ooo+|
|       . o o .o o|
|        . . o o=.|
|           . . B=|
|              *.+|
+----[SHA256]-----+
----------------------------------------

通过上面命令可以发现,生成的SSH密钥文件路径为:/var/jenkins_home/.ssh/id_rsa.pub.我们在配置Jenkins容器时,已经将该目录在我们的宿主机上面进行了映射,可以在宿主机上查看此文件。

由于.ssh目录为隐藏目录,需要使用ls -a命令才能查看此目录。

[root@localhost data]# ls -a;
.
..
.cache
com.cloudbees.hudson.plugins.folder.config.AbstractFolderConfiguration.xml
config.xml
copy_reference_file.log
github-plugin-configuration.xml
.groovy
hudson.model.UpdateCenter.xml
hudson.plugins.build_timeout.global.GlobalTimeOutConfiguration.xml
hudson.plugins.build_timeout.operations.BuildStepOperation.xml
hudson.plugins.emailext.ExtendedEmailPublisher.xml
hudson.plugins.git.GitSCM.xml
hudson.plugins.git.GitTool.xml
hudson.plugins.timestamper.TimestamperConfig.xml
hudson.tasks.Mailer.xml
hudson.tasks.Shell.xml
hudson.triggers.SCMTrigger.xml
identity.key.enc
io.jenkins.plugins.junit.storage.JunitTestResultStorageConfiguration.xml
.java
jenkins.fingerprints.GlobalFingerprintConfiguration.xml
jenkins.install.InstallUtil.lastExecVersion
jenkins.install.UpgradeWizard.state
jenkins.model.ArtifactManagerConfiguration.xml
jenkins.model.GlobalBuildDiscarderConfiguration.xml
jenkins.model.JenkinsLocationConfiguration.xml
jenkins.plugins.publish_over_ssh.BapSshPublisherPlugin.xml
jenkins.security.ResourceDomainConfiguration.xml
jenkins.tasks.filters.EnvVarsFilterGlobalConfiguration.xml
jenkins.telemetry.Correlator.xml
jobs
.lastStarted
net.uaznia.lukanus.hudson.plugins.gitparameter.GitParameterDefinition.xml
nodeMonitors.xml
nodes
org.jenkinsci.plugins.github_branch_source.GitHubConfiguration.xml
org.jenkinsci.plugins.workflow.flow.GlobalDefaultFlowDurabilityLevel.xml
org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml
org.jvnet.hudson.plugins.SSHBuildWrapper.xml
.owner
plugins
queue.xml.bak
scriptApproval.xml
secret.key
secret.key.not-so-secret
secrets
.ssh		# 这里
updates
userContent
users
war

跳转至.ssh目录下即可查看生成的SSH公钥信息,具体命令如下:

[root@localhost .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDqCnWl2QkQdan5K9qkhOrFXULeEAnxL2iKAGmULbv7r5+tWeHBYfWaW8KjIkNSaEcCQUBpodxl9y5YrCxfn1d9wyWDaaC2TgIfXSV+oQStlFj17wibk/VTs12T+j+A0rQ4x/EXvBIKCsC32neR4ucUVKp1WNGUtARj9aTWAu7jweUeNCh2mCVUWSWFp52OHoEcdVlqRTrT/kFTg3yXr8CcR1ucUReco6x6cPgKD4EQ1kLigb5gtEbo7DIE6zLtDtI7BPqtRWQ+XH4oEe1FIPVwDiOXpRdARvJRmeGcDNBcP7sRT5Zc2ne5xMG/dqse8S1m8M04gaOby36HVyXc6h5dq035rQqX1KAobzBW3xS6fSHI21QhFOWcZp6LurYwdL1WPINXJn3itOocQWan/fWU5gymazRLlhw8uE5UKsT+VV3J0Pn9eoSrJjIb6OkpHJwYWv9OsC0G8zEbu0DUZqpeRIjqDcg4OnZTtg5fJ3m71iHrqQ7v/O9otc67nfQiU7k= 729941382@qq.com

把上面的公钥文件中的内容在Gitlab中进行配置,在Gitlab页面右上角的下拉菜单中点击【设置】。
jenkins CI/CD持续集成/交付/部署_第28张图片
jenkins CI/CD持续集成/交付/部署_第29张图片

5.4配置maven和jdk

复制本地的JDK和Maven的tar.gz压缩包到data目录下

/opt/docker_jenkins/data

手动解压,使用下面命令将JDK和Maven解压至当前目录。

tar -zxvf jdk-8u301-linux-x64.tar.gz
tar -zxvf apache-maven-3.8.6-bin.tar.gz

在Jenkins配置页面配置JDK和Maven。

jenkins CI/CD持续集成/交付/部署_第30张图片
jenkins CI/CD持续集成/交付/部署_第31张图片

5.5 手动拉取Gitlab项目

使用SSH无密码连接时,第一次连接需要手动拉取一次代码,用于确定连接正常。

使用命令进入Jenkins的Docker容器内

登录Gitlab站点的项目主页,复制项目对应的SSH项目代码,然后在Jenkins对应的Docker容器内执行Git clone命令将对应的项目代码从Gitlab中拉取到Jenkins服务器内。

jenkins@e4e438826333:~$ cd /var/jenkins_home
jenkins@e4e438826333:~$ git clone [email protected]:biejihao/test-ci.git
Cloning into 'test-ci'...
The authenticity of host '192.168.229.132 (192.168.229.132)' can't be established.
ECDSA key fingerprint is SHA256:oaWR3fn541uaitlzbciIFD+E6eiGTNx2wMA3agoftIo.
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '192.168.229.132' (ECDSA) to the list of known hosts.
remote: Counting objects: 72, done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 72 (delta 21), reused 63 (delta 17)
Receiving objects: 100% (72/72), 12.28 KiB | 12.28 MiB/s, done.
Resolving deltas: 100% (21/21), done.
jenkins@e4e438826333:~$ 

查看代码是否拉取成功:说明测试成功

删除拉取的代码文件夹

jenkins@e4e438826333:~$ rm -rf test-ci

6.新建jenkins任务

jenkins CI/CD持续集成/交付/部署_第32张图片

6.1配置项目git路径

jenkins CI/CD持续集成/交付/部署_第33张图片

6.2配置登录git的用户名密码

jenkins CI/CD持续集成/交付/部署_第34张图片

6.3配置maven及命令

jenkins CI/CD持续集成/交付/部署_第35张图片

6.4配置远程服务器路劲和脚本

jenkins CI/CD持续集成/交付/部署_第36张图片

注意Source files 这个一定要写jks 默认打包项目的路劲
部署项目shell脚本或命令,exec command:

ps -ef|grep "port=8099"|awk {'print $2'}|xargs kill -9
nohup java  -Dspring.application.name=test-ci -jar -Xms1024m -Xmx1536m -XX:PermSize=1024M -XX:MaxPermSize=1536M  testci-0.0.1-SNAPSHOT.jar &
tail -f nohup.out 

6.5 保存执行构建

jenkins CI/CD持续集成/交付/部署_第37张图片

访问测试:成功

jenkins CI/CD持续集成/交付/部署_第38张图片

你可能感兴趣的:(linux,jenkins,ci/cd,docker)