文章目录
前言: 因为历史原因,公司的jenkins版本只能使用windows,而gitLab则是linux版本,简单的安装问题在本篇不做多介绍;
jenkins安装: https://blog.csdn.net/evelynnJava/article/details/126522842
gitLab安装: https://blog.csdn.net/evelynnJava/article/details/126490457
手动jenkins插件地址下载: 有时候想要低版本的插件,可以从这里下手动导入()
http://updates.jenkins-ci.org/download/plugins/ 或 https://plugins.jenkins.io/caffeine-api/#releases
1.jenkins (windows 版本 Jenkins 2.346.3)
本版应该是能兼容JDK8最后一个版本了,再往上只能是JDK11+
下载war包:https://get.jenkins.io/war-stable/2.346.3/
新建简单的启动脚本 start.bat
:
Title 'jenkins 9999'
java -jar jenkins.war --httpPort=9999
运行.bat文件启动,默认生成核心目录至 C:\Users\Administrator\.jenkins
如果遇到了无法下载插件的情况,和我一样处理即可。
1.点击Manage jenkins
-Manage plugin
-Advanced
; 拉到最后面 Update Site 的地址,https 改为 http;随后重启!!
2.离线下载插件skip-certificate-check
,手动上传;随后重启。此时就能愉快的下载插件了。
开始下最重要的几个插件(重启后生效):
如果用的也是gitLab就不需要Git和 Git Client了,装下面的其他插件即可
Credentials #签名证书管理插件
Gitlab #安装后从 GitLab 获取代码
Git和 Git Client #用于 Jenkins 在 GitLab 中拉取源码
GitLab Hook #GitLab 触发 Jenkins 构建项目
Gitlab Authentication # GitLab 和 Jenkins 认证插件
SSH Plugin #进程执行 Shell 脚本
Publish Over SSH #用于通过 SSH 部署应用
接下来开始配置
Mange Jenkins
-global Tool Configuration
如图配即可,下面的环境开发人员必有的。
2. Mange Jenkins
- Configure System
主要就是配置 SSH远程服务器
第一种方式- 密码
一般选择第二种方式- 密钥
进入到远程目录 /usr/local/services/ssh,在目录节点下执行如下命令,生成rsa密钥 (如果已存在会覆盖)
#生成rsa密钥,回车
ssh-keygen -t rsa
#此时目录 /root/.ssh 会生成 id_rsa:私钥 id_rsa.pub:公钥
#把公钥内容追加到认证文件中
cd /usr/local/services/ssh
touch authorized_keys
cat /root/.ssh/id_rsa.pub >> authorized_keys
#授权
chmod 700 /root/.ssh
chmod 700 /root/.ssh/id_rsa
chmod 700 /root/.ssh/id_rsa.pub
chmod 600 authorized_keys
把 id_rsa 私钥内容添加到 Publish over SSH 的 key 中 (或放到 ssh server 的 key中也行)
注:这里的 RemoteDirectory是通用的服务器路径,实际一般是在【具体构建的任务】中去配置,一般此行放空即可。
接下来在jenkins新建一个项目
在项目构建配置中,增加配置
如果上面全局配置中配了
Remote directory
,此处可以置空。此时直接构建运行当前项目,就会将demo-0.0.1-SNAPSHOT.jar
移动至服务器wrx-192.168.41.128的 /usr/local/services/ssh目录下
接下来,配置jenkins设置GitLab的钩子
注:Allowed branches :
Allow all branches to trigger this job #允许所有分支触发此作业
Filter branches by name #按名称过滤分支
Include :dev #允许触发构建的分支,dev分支提交会自动构建
Exclude:master #排除触发构建的分支,此时master分支提交不会自动构建
Filter branches by regex #通过正则表达式过滤分支
Source Branch Regex: #源分支正则表达式
Target Branch Regex:.*dev #目标分支正则表达式,允许触发构建的dev分支
Filter merge request by label #按标签过滤合并请求
Include: #允许触发构建的标签
Exclude: #排除触发自动构建的标签
2.gitLab (linux 版本:GitLab Community Edition 15.3.5
)
在gitLab配置前面的 url和token (url注意改成准确的ip)
如果保存不了,可能是因为本地网络安全限制,如下图红框部分勾选配即可。
此时会发现jenkins那边正在执行构建,且包会放到ssh server配置的服务器目录。
3.可能出现的错
更多问题参考这位踩坑王的。。 https://www.zhihu.com/question/485285429
例如可能gitLab hook 响应200,但是jenkins没有反应,他在jenkins生成了api的token,然后路径改为 http://admin:1166f22d175c400d712fb7a219fadedd76@192.168.1.148:9999/job/2/build?delay=0sec
ssh连接测试报错:
jenkins.plugins.publish_over.BapPublisherException: Failed to add SSH key. Message [invalid privatekey: [B@73c5aba9]
报私钥无效,一般有两种原因:
(1):可能是你配置到jenkins里的私钥没有携带起止标志-----BEGIN RSA PRIVATE KEY-----或-----END RSA PRIVATE KEY-----,这两个是要带着的
(2):如果你是最新版本的docker镜像安装的jenkins容器,那么原因可能是容器内ssh版本太高,生成的私钥格式不被新版本ssh认可。解决方案是手动生成旧格式的秘钥
(3):生成旧的格式密钥,如下:
#生成rsa密钥,回车
ssh-keygen -m PEM -t rsa -b 2048
#把公钥内容追加到认证文件中
cat /root/.ssh/id_rsa.pub >> authorized_keys
#授权
chmod 700 /root/.ssh
chmod 700 /root/.ssh/id_rsa
chmod 700 /root/.ssh/id_rsa.pub
chmod 600 authorized_keys
说明:
(1):.ssh文件夹、id_rsa、id_rsa.pub 权限为700。authorized_keys权限为600
(2):ssh-keygen -m PEM -t rsa -b 2048:
-m 参数指定密钥的格式,PEM是rsa之前使用的旧格式
-b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位
4.更多添加jenkins凭据的方式
1.jenkins凭证配置gitLab token的方式
2. gitLab配置jenkins服务器上的公钥
在windows上输入如下命令,ssh-keygen -t rsa ,生成的目录:C:\Users\Administrator/.ssh/id_rsa
id_rsa:私钥
id_rsa.pub:公钥