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 。

生成密钥对

  1. 检查用户
    如果不确定可以查看系统现有账户,如果存在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
  • 新建密钥存储目录
# 新建目录,并修改权限
mkdir -p /data/jenkins_home/Jenkins/.ssh
chmod -R 757 /data/jenkins_home/Jenkins/.ssh
  1. 切换到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,则表示切换成功
  1. 生成密钥对
  • 从新建立密钥
# 生成密钥对
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

# 修改密钥权限
chmod 600 /var/jenkins_home/.ssh/id_rsa

# 使用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

代码仓库端添加公钥

  1. 添加IP白名单
    路径:云效-工作台-代码管理-全局设置-IP白名单,添加对IP地址
    如果是其他代码仓库请自行查找相关教程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 添加ssh公钥
    路径:个人设置-SSH公钥-点击添加
    在这里插入图片描述
    在这里插入图片描述

Jenkins中创建项目,并使用私钥添加ssh凭据

这里以Android项目为例
路径:Jenkins > Dashboard > 新建项目

  1. 输入任务名称
  2. 选择构建一个自由风格的软件项目,点击确定
    在这里插入图片描述
  3. 自定义丢弃旧的构建
    在这里插入图片描述
  4. 源码管理
    选择Git
    在这里插入图片描述
    Repository URL 填入复制的ssh链接
    在这里插入图片描述
    Credentials 点击添加,点击Jenkins
    在这里插入图片描述
    类型 选择SSH Usemname with private key,点击 Private Key中的Enter directly,点击右侧的添加,填入之前获取到的私钥,点击右下角的添加
    在这里插入图片描述

注意:
如果Jenkins跟代码仓库连接没有问题的话,这里是不会显示任何报错,有报错就需要切换之前说的用户,再重新生成并配置密钥
在这里插入图片描述
假设Credentials 内选择 无,就会显示连接失败的报错
在这里插入图片描述
5. 自定义代码分支,想要拉取哪个分支的代码就填哪个分支的名称,默认为master
在这里插入图片描述
6. 自定义Build Steps
由于此项目为Android项目,所以选择Gradle环境
点击添加构建步骤;选择Invoke Gradle script;Tasks内填入"clean" “assembleRelease”
说明:assembleRelease # 打全渠道release包
在这里插入图片描述
7. 完成
确认无误后点击保存

构建项目

回到Jenkins主界面,点击进入刚刚创建的项目,点击左侧的立即构建
这里拿已经可以正常构建的项目举例
在这里插入图片描述
点击下方Builds内的条目,即可进入这次构建的详细界面
点击控制台输出,即可查看此次构建的详细日志记录
在这里插入图片描述

至此已完成一个Jenkins的自动化构建流程。Jenkins将会在点击立即构建后,从代码仓库拉取代码,并使用指定的环境进行编译打包,最后生成一个apk文件

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值