首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年12月 使用Jenkins实现程序的自动化发布

【愚公系列】2022年12月 使用Jenkins实现程序的自动化发布

作者头像
愚公搬代码
发布2022-12-30 15:27:22
5630
发布2022-12-30 15:27:22
举报
文章被收录于专栏:历史专栏历史专栏

文章目录

前言

一、使用Jenkins实现程序的自动化发布

1.安装Jenkins

二、安装Gitee插件

三、Ubuntu服务器相关编译环境配置

四、新建自动构建任务

五、Jenkins自动发布文件同步其他服务器

前言

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

Jenkins中文网:http://www.jenkins.org.cn/

Jenkins官网:http://www.jenkins.org.cn/

一、使用Jenkins实现程序的自动化发布

1.安装Jenkins

1、安装java

sudo apt-get install openjdk-11-jre-headless
sudo apt-get install openjdk-11-jdk-headless

2、配置java环境

$ sudo vim /etc/environment

在此文件的末尾,添加以下行,确保使用您自己复制的路径替换突出显示的路径:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/bin/java"

现在重新加载此文件:

$ source /etc/environment

验证是否已设置环境变量:

$ echo $JAVA_HOME

3、安装Jenkins

sudo apt-get install --reinstall ca-certificates
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get -y update
sudo apt-get install jenkins
sudo ufw allow 8080 //开放8080端口防火墙

修改Jenkins执行用户

ps aux | grep jenkins //查看时谁启动的
sudo vim /usr/lib/systemd/system/jenkins.service  //修改这两项 JENKINS_USER=root、JENKINS_GROUP=root 重启systemctl restart jenkins.service
systemctl daemon-reload
systemctl restart jenkins

默认端口是8080,通过http://127.0.0.1:8080/访问

根据提示找到密码输入就好了sudo cat /var/lib/jenkins/secrets/initialAdminPassword

一路点击就好了

4、安装完成

二、安装Gitee插件

这边以我的个人博客代码为例子,因为目前我的个人博客代码是托管到码云上,因此这里利用Gitee插件来实现持续发布功能

点击左侧 Dashboard->Manage Jenkins(系统管理) 菜单,并点击Manage Plugins(插件管理)

选择可选插件,然后输入Gitee,然后点 Download now and install after restart

这个插件主要是用于接收gitee WebHook通知(如:代码提交、PR等)并触发jenkins构建

安装成功后,前往 Jenkins -> Manage Jenkins(系统管理) -> Configure System(系统配置) -> Gitee Configuration(Gitee配置) ,对插件进行配置。

添加一个新的证书令牌,按照如下配置,GiteeAPIV5 私人令牌可以通过页面:https://gitee.com/profile/personal_access_tokens 生成,然后点击添加。

这个时候点击测试连接,查看确实连接上了。

三、Ubuntu服务器相关编译环境配置

sudo apt-get install -y openssh-server
systemctl enable ssh
sudo apt-get install dotnet-sdk-6.0
sudo apt-get install git

安装内网穿透工具案例地址:https://cloud.tencent.com/developer/article/2186419

后续会内穿到本地服务器

四、新建自动构建任务

1、进入 Dashboard->新建任务,输入任务名称,然后选择流水线。

2、General和触发器的配置

3、流水线配置

点击Credentials 右下方的添加按钮,添加用于拉取代码用的身份验证凭据。

需要注意的是:如果使用git ssh 协议(也就是格式为git开头的仓储地址),则添加身份验证凭据的时候,凭据类型只支持:Username with password (用户名和密码验证)、SSH Username with private key(用户名和私钥验证),用户名就是gitee的登录账号。

本人选择用户名和私钥验证

在服务器上输入以下命令创建身份验证凭据私钥,-C 后面的参数可以是任意内容,但通常用邮箱账号。

ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"

查看公钥

cat ~/.ssh/id_ed25519.pub

将公钥内容复制到gitee指定项目的 管理->部署公钥管理->添加公钥中添加指定公钥

gitee上添加公钥后,在服务器上执行以下命令

ssh -T git@gitee.com

通过执行以下命令读取ssh身份验证私钥内容,并输入到 jenkins 身份验证凭据的以下位置。

cat ~/.ssh/id_ed25519

4、脚本配置

在项目的解决方案文件(.sln)同级目录下新建名称为jenkinsfile的文件,并输入以下脚本内容

git 初始化配置

git init
git config --global --add safe.directory /www/wwwroot/test
git config --global credential.helper store //配置一次gite账户密码以后就不用了

pipeline {
    agent any
    stages {
        stage('build') {
            steps {
              echo '开始拉取代码'
              sh 'git pull origin master'
              echo '切换到本地master分支'
              sh 'git checkout master'
              
              echo '当前工作目录及文件列表如下'
              sh 'pwd'
              sh 'ls -al'
              
              dir("${WORKSPACE}/003-ABP-WEB") {
                 echo '开始编译前端站点'
                 sh 'dotnet publish ./003-ABP-WEB.csproj -c Release -r linux-x64 --no-restore'
              }
              //WORKSPACE表示存放代码的根目录。
              dir("${WORKSPACE}/004-ABP-WPF"){
                echo '开始编译后台站点'
                sh 'dotnet publish ./004-ABP-WPF.csproj -c Release -r linux-x64 --no-restore'
              }
            }
        }
        stage('deploy')
        {
            steps {
              echo '开始发布流程,当前工作目录如下'
              sh 'pwd'
             
              echo '开始发布个人前端系统'
              echo '停止前端站点'
              sh 'ssh -i ~/.ssh/id_rsa root@127.0.0.1 -p 1200 -T "systemctl stop 003-ABP-WEB"'
              //dir函数里面要用环境变量记得用双引号,该函数用于改变当前目录,dir函数块里面包含的所有相对路径都是相对于dir指定的目录。
              dir("${WORKSPACE}/003-ABP-WEB/bin/Release/netcoreapp6.0/linux-x64/publish/"){
                    //-i 用于指定ssh传输身份验证私钥,-r表示复制目录下的所有文件及子目录以及子目录下的所有文件,也可以将这个文件夹打包压缩后再传输。
                    sh 'scp -P 1200 -i ~/.ssh/id_rsa -r ./ root@127.0.0.1:/var/www/003-ABP-WEB' 
              }
              echo '重启前端站点'
              //这里不能使用-t 选项,应该使用-T 或 -tt 代理,否则无法正确执行。
              sh 'ssh -i ~/.ssh/id_rsa root@127.0.0.1 -p 1200 -T "systemctl restart 003-ABP-WEB"'
              
              echo '开始发布个人后台管理系统'
              echo '停止后台站点'
              sh 'ssh -i ~/.ssh/id_rsa root@127.0.0.1 -p 1200 -tt "systemctl stop 004-ABP-WPF"'
              dir("${WORKSPACE}/004-ABP-WPF/bin/Release/netcoreapp3.1/linux-x64/publish/"){
                      sh 'scp -P 1200 -i ~/.ssh/id_rsa -r ./ root@127.0.0.1:/var/www/004-ABP-WPF' 
              }
              echo '重启后台站点'
              sh 'ssh -i ~/.ssh/id_rsa root@127.0.0.1 -p 1200 -tt "systemctl restart 004-ABP-WPF"'
     
              echo '系统发布成功'
            }
        }
    }
}

五、Jenkins自动发布文件同步其他服务器

在jenkins 服务器上执行以下命令,创建ssh 身份认证秘钥,并将公钥复制到应用服务器上,以便在编译成功后,直接复制dll到应用服务器上,而无需输入应用服务的登录密码,需要注意的是,创建秘钥前,先切换到jenkins用户账号。

ssh-keygen -t rsa

以下命令表示将jenkins所在服务器生成的公钥复制到应用服务器(因为~/.ssh/目录下已经有其他的秘钥,因此这边指定复制哪一个公钥)

ssh-copy-id -i ~/.ssh/id_rsa.pub root@IP -p 1200

以上两个命令执行成功后,可以创建一个文本文件进行测试,看下是否能无需输入密码就可以复制文件到应用服务器。

cd ~
touch test.txt
echo "测试内容" >> test.txt

以下命令用于将jenkins服务器上用户主目录下的test.txt文件复制到应用服务器上用户主目录。

# -P 表示应用服务器的ssh登录端口(如果不是22,必须指定),-i 后面跟的是jekins服务器上生成的私钥文件。
scp -P 1200 -i ~/.ssh/id_rsa ~/test.txt root@115.159.114.65:~
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档