【自动化】使用Jenkins实现自动化部署
使用Jenkins实现实现自动化软件开发过程中的构建、部署任务
相关文章
使用Jenkins实现自动化部署
一、jenkins 是什么
Jenkins 是一个流行的开源持续集成(CI)和持续交付(CD)工具,用于自动化软件开发过程中的构建、测试和部署任务。它是一个基于 Java 的跨平台工具,可以在各种操作系统上运行,包括 Windows、Linux 和 macOS。
二、主要功能
持续集成
Jenkins 可以自动化构建和测试代码的过程,并在代码提交后持续地进行集成,以确保代码的质量和稳定性。
持续交付
通过与其他工具和服务集成,Jenkins 可以自动化软件的部署和交付过程,从而加快软件的发布速度和频率。
插件生态系统
Jenkins 拥有丰富的插件生态系统,提供了各种功能和扩展,可以满足不同团队和项目的需求。
易于配置和扩展
Jenkins 提供了直观的用户界面和灵活的配置选项,使得用户可以轻松地配置和管理各种构建和部署任务,并通过插件来扩展其功能。
可视化监控和报告
Jenkins 提供了丰富的构建监控和报告功能,包括构建历史、测试报告、代码覆盖率等,帮助用户了解项目的状态和质量。
三、安装 jenkins
准备环境
确保你的系统上已经安装了 Java 运行时环境(JRE)或者 Java 开发工具包(JDK)。Jenkins 需要 Java 运行时环境来运行。
下载jdk安装包
1
# wget https://mirrors.huaweicloud.com/openjdk/11.0.2/openjdk-11.0.2_linux-x64_bin.tar.gz
解压并重命名
1
2# tar xf openjdk-11.0.2_linux-x64_bin.tar.gz
# mv jdk-11.0.2/ /usr/local/jdk11配置环境变量
1
# export PATH=/usr/local/jdk11/bin:$PATH
使配置文件生效
1
# source /etc/profile
验证结果
1
# java -version
显示java版本号表示安装成功
添加 Jenkins 软件源
在你的系统中添加 Jenkins 的软件源,以便能够使用包管理器安装 Jenkins。你可以在 Jenkins 的官方网站上找到相应的软件源配置方式。
添加软件源
1
# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.426.1-1.1.noarch.rpm
安装 Jenkins
使用你系统的包管理器(例如 yum、apt-get、dnf 等)来安装 Jenkins。具体命令可能会根据你所使用的操作系统和包管理器有所不同,通常是类似于以下的命令:
安装 jenkins
1
# yum -y localinstall jenkins-2.426.1-1.1.noarch.rpm
安装fontconfig
否则可能会有相关报错
1
# yum -y install fontconfig
修改jenkins配置文件,添加jdk环境变量
1
# vim /usr/lib/systemd/system/jenkins.service
加入以下代码
1
# Environment="JAVA_HOME=/usr/local/jdk11"
使配置生效
systemctl daemon-reload 命令用于重新加载 Systemd 的配置文件,使得 Systemd 重新加载所有配置文件并生效。
1
# systemctl daemon-reload
启动 Jenkins 服务
安装完成后,使用以下命令来启动 Jenkins 服务
1
# systemctl start jenkins
设置 Jenkins
打开浏览器,访问 Jenkins 的管理界面,默认地址是 你的服务器IP地址:8080。
密码文件位置:/var/lib/jenkins/secrets/initialAdminPassword
按照提示完成 Jenkins 的初始化设置,安装建议的插件等。
按照提示完成 Jenkins 的初始化设置,包括创建管理员账号。
访问 Jenkins
完成设置后,你可以通过浏览器访问 Jenkins 的管理界面,并开始配置和使用 Jenkins 进行持续集成和持续交付工作。
四、准备项目环境
以下为构建github中的项目举例
准备token
进入github、点击头像、点击settings、点击Developer Settings
点击
Personal access tokens
、点击tokens、点击Generate new token
填写名字、有效期、勾选 repo、admin:repo_hook
保存、复制token内容
github配置webhooks
进入github、点击settings、点击webhooks、输入jenkins所在服务器地址和端口号+
github-webhook
安装node
进入jenkins、点击系统管理、点击插件管理
点击可用插件、搜索
nodejs
、勾选、安装点击系统管理、点击全局工具配置
找到NodeJS安装,新增一个版本,也可以同时新增一些必要的npm包例如
yarn
、保存
配置github凭据
点击系统管理、点击系统配置
找到github、勾选管理hook、点击添加凭据
选择
Secret text
类型,填写Secret
值(也就是github中生成的token)、添加添加选择刚添加的凭据
这里也可以修改webpack webhooks的值,也就是前面配置的webhooks地址
配置ssh(私有仓库需要)
生成RSA类型的SSH密钥
1
# ssh-keygen -t rsa -C "cc_byland@163.com"
进入github、点击头像、点击settings、点击
SSH and GPG keys
、点击New SSH key
填写title、选择key type为
Authentication Key
、填写key(填入公钥-id_rsa.pub内容)进入jenkins、点击系统管理、点击凭据管理
点击任意一个全局
新增凭据
类型选择
SSH Username with private key
、填写Private Key(填入私钥-id_rsa内容)
、点击保存凭据
五、新建项目
新建任务
填写任务基本信息
填写任务名称、选择构建一个自由风格的软件项目、点击确定
General
填写项目描述与github地址
源代码管理
填写git仓库url与目标分支
新增一个证书(有就当我没说)
输入用户名、密码、点击添加
选择刚添加的证书
如果是私有项目,则填写SSH地址,并选择ssh凭据
如果你遇到了
No ECDSA host key is known for github.com and you have requested strict checking. Host key verification failed
,就接着往下看,否则跳过直接看构建触发器
配置
是因为known_hosts文件的关系,known_hosts 文件是SSH客户端用来存储已知主机密钥的文件。当您第一次连接到一个远程主机时,SSH客户端会获取该主机的公钥,并将其存储在 known_hosts 文件中。然后,当您再次连接到相同的远程主机时,SSH客户端会检查 known_hosts 文件,以确保远程主机的公钥没有发生变化。
使用 ssh-keyscan 命令来获取GitHub的主机密钥,并将其附加到 known_hosts 文件中
1
ssh-keyscan -t ecdsa github.com >> ~/.ssh/known_hosts
同时还需要执行cp命令将服务器上known_hosts复制到jenkins服务账号的~/.ssh目录下;因为你的服务器root用户可以正常clone github代码,但是jenkins执行的时候用户是jenkins
1
cp ~/.ssh/known_hosts /var/lib/jenkins/.ssh/
如果没有意外的话,上面那个报错已经意外的消失了
构建触发器
选择
GitHub hook trigger for GITScm polling
大概意思当Jenkins收到github推送时,就会触发构建
构建环境
选择
Use secret text(s) or file(s)
,新增一个密文选择前面配置的密文
选择
Provide Node & npm bin/ folder to PATH
,把node、npm环境变量丢给容器
Build Steps
增加构建步骤、执行shell
填写项目构建的shell脚本,如:
1
2
3
4
5
6
7node -v
npm -v
yarn
yarn build
pwd
ls
cp -r /var/lib/jenkins/workspace/blog/public/* /app/blog/public
保存
六、手动执行一次构建
回到首页,发现任务列表多了一条刚新增的任务,点击任务名称进入
立即构建
查看控制台
可以看到执行了我们提供的shell命令
结尾处显示了构建结果
如果你遇到这个
则是因为jenkins用户权限不足,可以考虑给命令添加sudo前缀
添加完,可能还会遇到这个错误
1 |
|
这个错误通常出现在尝试在非交互式环境下使用 sudo 命令时,sudo 无法与用户进行交互以获取密码。它需要一个交互式终端(tty)来提示用户输入密码,但在非交互式的环境下,它无法提示用户输入密码。
添加 NOPASSWD 选项:如果您有权限编辑 sudoers 文件,您可以尝试为相应的用户或命令添加 NOPASSWD 选项,以允许在不提示密码的情况下使用 sudo。这需要谨慎操作,确保您只给予必要的权限。例如:
编辑sudoers文件
1
sudo visudo
添加如下内容
1
jenkins ALL=(ALL) NOPASSWD: ALL
这将允许 jenkins 用户在不需要输入密码的情况下使用 sudo。
重新构建就ok了
七、自动化构建演示
- 注意左上角窗口,当提交文件时,会自动创建一个构建任务
- 注意右上角窗口,当构建任务完成时,页面内容发生了更新
- 注意右下角窗口,提交了一个文件