文章目录
- 准备
- 注意:
- 流程:
- 检查之前是否配置过与代码仓库的连接
- 生成密钥对
- 手动在服务器中与代码仓库建立连接以生成 Known hosts file
- 代码仓库端添加公钥
- Jenkins System-Publish over SSH中添加私钥
- Jenkins中创建项目,并使用私钥添加ssh凭据
- 构建项目
准备
注意:
如果你确定你的Jenkins使用的是root用户(这里指的是在Linux系统中的用户,不是Jenkins的登录用户),则不需要切换用户直接使用root用户操作"生成密钥对"之后的即可。
如果你不确定你的Jenkins使用的是root用户还是Jenkins用户,则建议分别使用两个账户都去操作一遍。
如果未使用正确的用户配置密钥对,则无法跟代码仓库完成验证,产生 No RSA host key is known for codeup报错,进而无法从代码仓库拉取项目代码。
如果未使用正确的用户进行一次代码仓库的连接,则可能出现known_hosts file does not exist错误。
构建项目中使用的环境可以参考栏目内的环境搭建的文章
流程:
检查之前是否配置过与代码仓库的连接 > 生成密钥对 > 测试与代码仓库的连接 > 代码仓库端添加公钥 > jenkins系统管理-System-Publish over SSH中添加私钥 > Jenkins中创建项目,并使用私钥添加ssh凭据 > 手动在服务器中与代码仓库建立连接以生成 Known hosts file > 自动化编译并构建项目
检查之前是否配置过与代码仓库的连接
注意:确保Jenkins使用的是root账户,如果不是请切换到Jenkins使用的账户
- 检查之前是否配置过与代码仓库的连接
我这里使用的是阿里云的云效,如果是其他代码仓库,则需要替换。
现在只是测试连接,不用进行连接,输入"no" 取消即可
如果是连接过代码仓库,则直接操作"生成密钥对"中的查看公钥与私钥即可
# 未连接过情况,则会进行确认
root@yx-PowerEdge-R730:~# ssh -T git@codeup.aliyun.com
The authenticity of host 'codeup.aliyun.com (118.31.165.50)' can't be established.
RSA key fingerprint is SHA256:yEGmgQc3QAvDvoKwmmQWi9vSt/fE.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? # 输入no,有这个提示则代表当前用户没有与代码仓库建立过连接# 连接过情况,则会输出欢迎语句
jenkins@bdf796726e0a:/$ ssh -T git@codeup.aliyun.com # 这里是云效地址,如果是其他代码仓库,则需要替换
Welcome to Codeup, zhangbz! # Github输出
You’ve successfully authenticated, but GitHub does not provide shell access 。
生成密钥对
- 检查用户
如果不确定可以查看系统现有账户,如果存在jenkins用户,则建议先切换到Jenkins用户
- 对于非容器化
root@yx-PowerEdge-R730:~# awk -F':' '{ print $1 }' /etc/passwd # 仅显示用户名列表
root@yx-PowerEdge-R730:~# cat /etc/passwd # 显示所有用户的信息
- 对于容器
# docker exec Jenkins所在容器ID或名称 awk -F':' '{ print $1 }' /etc/passwd
root@yx-PowerEdge-R730:~# docker exec jenkins_new awk -F':' '{ print $1 }' /etc/passwd# docker exec Jenkins所在容器ID或名称 etc/passwd
root@yx-PowerEdge-R730:~# docker exec jenkins_new cat /etc/passwd
- 我这里返回结果中包含jenkins用户
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
jenkins:x:1000:1000::/var/jenkins_home:/bin/bash
- 切换到jenkins用户
我这里是容器化部署的Jenkins
- 容器化Jenkins操作,非容器化部署的忽略这一步
# docker exec Jenkins所在容器ID或名称 bin
root@yx-PowerEdge-R730:~# docker exec -it jenkins_new bash # 进入容器
root@bdf796726e0a:/# #root后发生了变化,代表进入成功,此时为root用户进入的容器
- 切换到jenkins用户
从这里能看出,如果是容器化则@后为你的容器ID,如果不是容器化则@后为你的机器名
# 非容器化
root@yx-PowerEdge-R730:/# su jenkins # 切换用户
jenkins@yx-PowerEdge-R730:/$ # @前的用户名变为Jenkins,则表示切换成功# 容器化
root@bdf796726e0a:/# su jenkins # 容器内切换用户
jenkins@bdf796726e0a:/$ # @前的用户名变为Jenkins,则表示切换成功
- 生成密钥对
- 从新建立密钥
# 生成密钥对
jenkins@bdf796726e0a:/$ ssh-keygen -t rsa -C "jenkins"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:tUB6SjLnvqM7p2l+bmHUZGNqUyyOPmXGyiMp3tC9xNA root@linuxcool.com
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| .oB |
| +++Oo.. |
| ..E@o.o . |
| .++Bo.S . |
|..o.*=o |
|..o..+o. |
| . .oo=. |
| o*Xo. |
+----[SHA256]-----+# 使用上面的文件目录路径查看公钥
jenkins@bdf796726e0a:/$ cat /var/jenkins_home/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2 # 示例展示,如果有ssh-rsa开头的字符串则代表成功# 使用上面的文件目录路径查看私钥
jenkins@bdf796726e0a:/$ cat /var/jenkins_home/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY----- # 有此字符串输出则代表成功
- 已连接过但不知道密钥在哪
# 全目录搜索密钥文件,优先使用Jenkins用户的密钥
root@bdf796726e0a:/# find / -name *id_rsa*
/root/.ssh/id_rsa # root用户的私钥
/root/.ssh/id_rsa.pub # root用户的公钥
/var/jenkins_home/.ssh/id_rsa # jenkins用户的私钥
/var/jenkins_home/.ssh/id_rsa.pub # jenkins用户的公钥
手动在服务器中与代码仓库建立连接以生成 Known hosts file
- 测试与代码仓库的连接,以生成known_hosts file
# 连接前:
jenkins@bdf796726e0a:/$ ls /var/jenkins_home/.ssh
id_rsa id_rsa.pub# 使用Jenkins用户连接,出现欢迎信息则代表成功
jenkins@bdf796726e0a:/$ ssh -T git@codeup.aliyun.com
The authenticity of host 'codeup.aliyun.com (118.31.165.50)' can't be established.
RSA key fingerprint is SHA256:yEGQNVrcCF2s07KwmmQWi9vSt/fE.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? # 输入yes确认
Welcome to Codeup, zhangbz!# 连接后,多了一个konwn_hosts文件
jenkins@bdf796726e0a:/$ ls /var/jenkins_home/.ssh
id_rsa id_rsa.pub known_hosts
代码仓库端添加公钥
- 添加IP白名单
路径:云效-工作台-代码管理-全局设置-IP白名单,添加对IP地址
如果是其他代码仓库请自行查找相关教程
- 添加ssh公钥
路径:个人设置-SSH公钥-点击添加
Jenkins System-Publish over SSH中添加私钥
路径:Dashboard - 系统管理 - 系统配置(System) - Publish over
在key中填入私钥,点击保存
Jenkins中创建项目,并使用私钥添加ssh凭据
这里以Android项目为例
路径:Jenkins > Dashboard > 新建项目
- 输入任务名称
- 选择构建一个自由风格的软件项目,点击确定
- 自定义丢弃旧的构建
- 源码管理
选择Git
Repository URL 填入复制的ssh链接
Credentials 点击添加,点击Jenkins
类型 选择SSH,Passphrase 填入之前获取到的私钥,点击保存
注意:
如果Jenkins跟代码仓库连接没有问题的话,这里是不会显示任何报错,有报错就需要切换之前说的用户,再重新生成并配置密钥
假设Credentials 内选择 无,就会显示连接失败的报错
- 自定义代码分支,想要拉取哪个分支的代码就填哪个分支的名称,默认为master
- 自定义Build Steps
由于此项目为Android项目,所以选择Gradle环境
点击添加构建步骤;选择Invoke Gradle script;Tasks内填入"clean" “assembleRelease”
说明:assembleRelease # 打全渠道release包
- 完成
确认无误后点击保存
构建项目
回到Jenkins主界面,点击进入刚刚创建的项目,点击左侧的立即构建
这里拿已经可以正常构建的项目举例
点击下方Builds内的条目,即可进入这次构建的详细界面
点击控制台输出,即可查看此次构建的详细日志记录
至此已完成一个Jenkins的自动化构建流程。Jenkins将会在点击立即构建后,从代码仓库拉取代码,并使用指定的环境进行编译打包,最后生成一个apk文件