文章目录
- 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,密码默认为初始我们自己设置的密码,创建用户,登陆后主页如下所示:
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。
安装时,最好将Gitlab与Gitlab Runner安装在不同的服务器上面。
使用下面的命令启动Gitlab Runner的注册流程。
#准备上图的url 与 token
url: http://192.168.229.132/
token: zmUVQy5HmgowU1rzMeoB
#如图,需要输入的地方
此时,Gitlab Runner已经配置完毕,与Gitlab中的项目进行绑定。
刷新Gitlab中项目的设置-CI/CD页面,展开Runner对应的模块,可以查看对应的Runner已经与其绑定。
编辑当前的信息,选中【运行没有标签的作业】属性,然后保存更改,此属性表示此Runner可以运行没有任何标签的作业。
至此,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
如图:
再次提交,推送到git:http://192.168.229.132/biejihao/test-ci.git
此时在Gitlab项目的CI-CD -> [流水线] 功能下将会出现一个流水线执行情况,之后的每一次Git提交将会触发此自动执行命令,执行的脚本为我们之前编写的[.gitlab-ci.yml]文件中的代码,但是我们在执行时发现执行运行中,如下图所示:
如果是运行失败,可能是没有jdk环境
如下图,没有指定gitlab-runner,原因是最初指定runner后,项目有过删除记录。
流水线启动失败:需要安装git
#本机安装:
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>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</mirror>
# settings.xml中指定下载源位置
<localRepository>/usr/local/maven/repository</localRepository>
但是我们执行命令时实在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项目文件路径,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<groupId>com.zgs</groupId>
<artifactId>testci</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webXml>src/main/web/WEB-INF/web.xml</webXml>
</configuration>
</plugin>
</plugins>
</build>
</project>
如出现如下情况,本机8080端口被占用,停止就可以了。
将此改动推送至Gitlab仓库,查看CI的流水线执行情况如下:
修改.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中查看流水线作业已经执行成功。
测试访问。如果访问不到,确认镜像是否成功,容器是否启动成功,端口是否映射成功。
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介绍(持续交付、持续部署)
持续交付:将代码交付给专业的测试团队进行测试。
持续部署:将测试通过的代码,发布到生产环境。
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
然后点击安装按钮
等待安装完成
然后系统执行安装操作,需要等待一段时间,快则1-2个小时,慢则1-2天,安装期间可以使用docker-compose logs -f查看安装日志,前提为进入到Jenkins对应的docker compose文件夹内执行。
插件安装完成后,创建第一个管理员用户。
用户名:biejh1497@3irobotics.com
密码:Aa729941382
全名:biejiahao
邮箱:729941382@qq.com
默认用户:admin
用户密码:7b796a87e6f444d9bebb1eeb8be81e91
配置实例,可以使用默认的URL地址。
看到上面的界面则证明Jenkins已安装成功。
5.2 配置目标服务器(shh登录方式)
程序代码 -> Gitlab -> Jenkins -> 目标部署服务器
Jenkins连接目标部署服务器
在这里我们配置将生成的目标文件部署至对应服务器中,配置步骤如下。
安装publish over ssh插件,用来连接jenkins客户端
在Jenkins页面中选在 系统管理 -> 系统配置,如下图所示:
在【系统配置】功能页面向下查找到【Publish over SSH】部分,如下图所示:
填写如下信息,注意remote Directory路径本机需要创建。
在【SSH Servers】点击【新增】按钮,【添加Gitlab服务器的SSH登录信息】,点击【高级】按钮可以配置更多的登录信息,我们这里配置的是密码和端口号,配置完成后可以点击【Test Configuration】按钮对配置的登录信息进行测试。
其中:remote Directory:/usr/local/jenkins(如果不存在则需要创建)
测试失败:多数连接不上的问题是:登录centos的账号密码错误
5.3 配置Jenkins免密码登录Gitlab
原理是将Jenkins容器内部的SSH密码配置到Gitlab服务器的SSH中,这样就可以实现免登录功能。
首先,通过下面命令进入到Jenkins容器内部。
#查看容器id
docker ps;
#进入容器
docker exec -it 容器id /bin/bash
#生成秘钥
ssh-keygen -t rsa -C "729941382@qq.com" #空回车3下
----------------------------------------
jenkins@e4e438826333:/usr$ ssh-keygen -t rsa -C "729941382@qq.com"
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页面右上角的下拉菜单中点击【设置】。
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。
5.5 手动拉取Gitlab项目
使用SSH无密码连接时,第一次连接需要手动拉取一次代码,用于确定连接正常。
使用命令进入Jenkins的Docker容器内
登录Gitlab站点的项目主页,复制项目对应的SSH项目代码,然后在Jenkins对应的Docker容器内执行Git clone命令将对应的项目代码从Gitlab中拉取到Jenkins服务器内。
jenkins@e4e438826333:~$ cd /var/jenkins_home
jenkins@e4e438826333:~$ git clone git@192.168.229.132: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任务
6.1配置项目git路径
6.2配置登录git的用户名密码
6.3配置maven及命令
6.4配置远程服务器路劲和脚本
注意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