jenkins集成gitlab实现自动构建
前面我们已经部署了Jenkins和gitlab,本文介绍将二者结合使用
项目源码上传至gitee提供公网访问:https://gitee.com/ye-xiao-tian/my-webapp
1、创建一个群组和项目
2、添加ssh密钥
#生成密钥
[root@gitlab ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:HJjcMIYHlwUFFK6gg3stiFTEyQ6fODeYED8YfcggOUU root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
|=OEoo+XBo |
|===+o=o* |
|o.@o..= o |
|.*.O . . . |
|+.o o S |
|o+ . |
|+ o . |
| . . |
| |
+----[SHA256]-----+
[root@gitlab ~]# ll .ssh/
total 8
-rw-------. 1 root root 1675 May 22 09:33 id_rsa #私钥
-rw-r--r--. 1 root root 393 May 22 09:33 id_rsa.pub #公钥
[root@gitlab ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDWTLxhCGI7yBFlfv8taFULt4yCLni4z3apIMqXUrKZXzieoM6SRk6VtNEOc0H+mGlEa42gAdrJjZy93/Po4fWI63NHQbzmvUXlbWxV6SePrrZuijafDpKJnZB1fyvmujAU2pYXX8ZdfpAPK5Y0OGGwkRAHWw9I2VGMjtNAHR2XIXTFZSL73rPww2gpqay6n5/JP2z+EmaViRVHKHt8G4oS2XYVK06iKhYCfEOF1UIf3uam77jc17A/v7MCyxExP8pNC9wsY5Z/t/zp9k5Sy5m4Is2nveiuk4uy+QVYFbISC3rVz2grYQ8sInBT3Py09fdJpA6/Ta/kIwe5P3pr9gI/ root@gitlab
3、将公钥贴近gitlab
4、推送本地代码
#上传本地代码至gitlab
[root@gitlab my-webapp]# pwd
/root/data/my-webapp
[root@gitlab my-webapp]# ll
total 4
-rw-r--r--. 1 root root 1032 May 22 09:14 pom.xml
drwxr-xr-x. 3 root root 18 May 22 09:14 src
#初始化代码
[root@gitlab my-webapp]# git init
Initialized empty Git repository in /root/data/my-webapp/.git/
#配置邮件
[root@gitlab my-webapp]# git config --local user.name "Administrator"
[root@gitlab my-webapp]# git config --local user.email "gitlab_admin_0cd627@example.com"
#上传
[root@gitlab my-webapp]# git add .
[root@gitlab my-webapp]# git commit -m "第一次上传"
[root@gitlab my-webapp]# git remote add origin http://192.168.232.135:1000/ops/my-webapp.git
#账号为root
#密码前面重置的密码
[root@gitlab my-webapp]# git push origin master
Username for 'http://192.168.232.135:1000': root
Password for 'http://root@192.168.232.135:1000':
Counting objects: 13, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (13/13), 1.54 KiB | 0 bytes/s, done.
Total 13 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for master, visit:
remote: http://192.168.232.135:1000/ops/my-webapp/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote:
To http://192.168.232.135:1000/ops/my-webapp.git
* [new branch] master -> master
- 页面查看上传的代码 (切换:master分支)
5、配置jenkins和gitlab的免密
5.1 jenkins容器生成密钥
[root@localhost ~]# docker exec -it -uroot jenkins bash
root@113b3ee555be:/# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Lk51oldcp/ZfdUyj2AuFHLpd3pM9K7X1OXGKrOZ0kkM root@113b3ee555be
The key's randomart image is:
+---[RSA 3072]----+
| . |
| o o |
| . o.o...|
| .o.*ooo+|
| S.E+o+ BB|
| + = +.oo.&|
| + o = +oo=o|
| o o ..= ..o|
| . oo .|
+----[SHA256]-----+
root@113b3ee555be:/# cat /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCuXKC0sOuYCFOt+V9iyx0NfLXYNdZoXv1LJ392mWZwLltxqjomBUczgiokq9UaU1Q0AwnSSOQI5kKaHEoydDyiqyOrQRUtakIHPdAwGgmUeb5+wWPKdE1PtUEH7OH/i7i7mD+0rK3MDBTRtulGlchxdxKq03RGEHFRfuhtH9elfD/LPDnbo3AcGNy4SPfm1v93Whq65IMo71Wb1+1voEv2WV3nKeUWF/C48O38x2TDapIotLPLlIMEDOL3BuN2Q7N6JqXbd8ZS9ttgMZ+m3eS5pHpOq3UFZpypXj36mCmBJrVq0vdEitooYzcQkLptzSSdZ6BOwWzWrl080Ca2RTdICPxaAAbNi4HBTXC29esHDz5pm20gcjfGFTVpVJ/YlY2/HimYzgP7AMG8rAF8AwGblhiiLvFadc7mAMnHmRwrwk0BaML7q9Pz4QmJ90/OLg3WwPqM26f3EgyJsZCCZY58keVIU9rprJO+1/B2JiIuU62HNWjN8Fksxl2vGVpTL40= root@113b3ee555be
- 2 将公钥加入gitlab
5.3 测试拉去代码
root@113b3ee555be:~# git clone git@192.168.232.135:ops/my-webapp.git
Cloning into 'my-webapp'...
remote: Enumerating objects: 16, done.
remote: Total 16 (delta 0), reused 0 (delta 0), pack-reused 16 (from 1)
Receiving objects: 100% (16/16), 4.32 KiB | 4.32 MiB/s, done.
root@113b3ee555be:~# ls
apache-maven-3.8.8 apache-maven-3.8.8-bin.tar.gz my-webapp
#切换mater分支
root@113b3ee555be:~/my-webapp# git checkout master
branch 'master' set up to track 'origin/master'.
Switched to a new branch 'master'
root@113b3ee555be:~/my-webapp# ls
pom.xml src
6、配置jenkins拉去gitlab代码
6.1 jenkins创建项目
6.2 点击立即构建
控制台输出查看日志 success表示成功
6.3 服务器查看代码已成功拉去至Jenkins工作目录
root@113b3ee555be:~# ls -ll /var/jenkins_home/workspace/my-wenapp/
total 4
-rw-r--r--. 1 jenkins jenkins 1032 May 24 23:17 pom.xml
drwxr-xr-x. 3 jenkins jenkins 18 May 24 23:17 src
drwxr-xr-x. 6 jenkins jenkins 165 May 24 23:18 target
#maven构建成功后jar包
root@113b3ee555be:~# ls -ll /var/jenkins_home/workspace/my-wenapp/target/
total 19296
drwxr-xr-x. 3 jenkins jenkins 47 May 24 23:18 classes
drwxr-xr-x. 3 jenkins jenkins 25 May 24 23:18 generated-sources
drwxr-xr-x. 2 jenkins jenkins 28 May 24 23:18 maven-archiver
drwxr-xr-x. 3 jenkins jenkins 35 May 24 23:18 maven-status
-rw-r--r--. 1 jenkins jenkins 19751142 May 24 23:18 my-webapp-1.0-SNAPSHOT.jar
-rw-r--r--. 1 jenkins jenkins 3199 May 24 23:18 my-webapp-1.0-SNAPSHOT.jar.original
#将java查询放在后台运行
root@d91c10166cdf:~# cd /var/jenkins_home/workspace/my-wenapp/target/
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# ls
classes generated-sources maven-archiver maven-status my-webapp-1.0-SNAPSHOT.jar my-webapp-1.0-SNAPSHOT.jar.original
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# nohup java -jar my-webapp-1.0-SNAPSHOT.jar > my-webapp.log 2>&1 &
[1] 81
#查看进程
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# ps -ef
UID PID PPID C STIME TTY TIME CMD
jenkins 1 0 0 23:35 ? 00:00:00 /usr/bin/tini -- /usr/local/bin/jenkins.sh
jenkins 7 1 15 23:35 ? 00:00:28 java -Duser.home=/var/jenkins_home -Djenkins.model.Jenkins.slaveAgentPort=50000 -Dhudson.lifecycle=hudson.lifecycle.ExitLifecycle -jar /usr/share/jenkins/jenkins.war
root 54 0 0 23:35 pts/0 00:00:00 bash
root 81 54 62 23:38 pts/0 00:00:13 java -jar my-webapp-1.0-SNAPSHOT.jar
root 111 54 0 23:38 pts/0 00:00:00 ps -ef
#访问本地8888端口
[root@localhost ~]# docker exec -it -uroot jenkins bash
root@d91c10166cdf:/# curl 127.0.0.1:8888
Hello! 你已成功第一次访问到8888端口服务!
7、配置webhook自动构建
7.1 jenkins页面配置
7.1.1 安装gitlab插件
7.1.2 记录webhook的url地址
http://192.168.232.136:8099/project/my-wenap
7.1.3 点击《高级》生产token
7.2 gitlab页面配置
7.2.1 输入url地址和token,触发来源:所有分支
7.2.2 点击测试 状态返回值为200,表示成功
8、修改代码重新提交后,发起自动构建
[root@gitlab ~]# vim data/my-webapp/src/main/java/com/example/controller/DemoController.java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DemoController {
@GetMapping("/")
public String hello() {
return "Hello! 你已成功第二次访问到8888端口服务!!";
}
}
[root@gitlab ~]# cd data/my-webapp/
#拉取远程代码更新合并
[root@gitlab my-webapp]# git pull origin master
From http://192.168.232.135:1000/ops/my-webapp
* branch master -> FETCH_HEAD
[root@gitlab my-webapp]# git add .
[root@gitlab my-webapp]# git commit -m "第二次提交"
[master efb4242] 第二次提交
1 file changed, 1 insertion(+), 1 deletion(-)
[root@gitlab my-webapp]# git push origin master
Username for 'http://192.168.232.135:1000': root
Password for 'http://root@192.168.232.135:1000':
Counting objects: 17, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 678 bytes | 0 bytes/s, done.
Total 9 (delta 1), reused 0 (delta 0)
remote:
remote: To create a merge request for master, visit:
remote: http://192.168.232.135:1000/ops/my-webapp/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote:
To http://192.168.232.135:1000/ops/my-webapp.git
61dd8c2..efb4242 master -> master
- 刷新页面自动构建
#杀手前面的java进程
root@d91c10166cdf:~# kill -9 81
#再次启动进程
root@d91c10166cdf:~# cd /var/jenkins_home/workspace/my-wenapp/target/
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# ls
classes generated-sources maven-archiver maven-status my-webapp-1.0-SNAPSHOT.jar my-webapp-1.0-SNAPSHOT.jar.original
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# nohup java -jar my-webapp-1.0-SNAPSHOT.jar > my-webapp.log 2>&1 &
[1] 1073
#再次访问
root@d91c10166cdf:/var/jenkins_home/workspace/my-wenapp/target# curl 127.0.0.1:8888
Hello! 你已成功第二次访问到8888端口服务!