Jenkins自动化部署gitee项目到阿里云ECS服务器

Jenkins自动化部署gitee项目到阿里云ECS服务器

环境准备

搭建maven、java、git环境

Jenkins安装

Jenkins(网址是 https://jenkins.io/) 是一个开源项目,它是一个基于 Java 的持续集成系统。我们可以在 Jenkins 上配置持续集成的任务,让机器自动完成构建(build),集中展示集成中存在的错误,提供详细的日志文件,提醒功能,以及用图表的形式展示项目构建的趋势和稳定性。

Linux安装Jenkins

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

//这里是Ubuntu进行安装
sudo apt-get update
sudo apt-get install jenkins

//CentOS进行安装默认使用yum进行安装
sudo yum update
sudo yum install jenkins

安装完成后,它会自动启动 Jenkins 服务。我们看一下它的状态,从屏幕输出可以看到,它当前正常运行。

[root@iZ2vc1e3nnjpo1cayr4utfZ ~]# sudo systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; generated)
   Active: active (running) since Fri 2021-06-25 21:37:28 CST; 21h ago
     Docs: man:systemd-sysv-generator(8)
  Process: 1712 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
    Tasks: 86 (limit: 10995)
   Memory: 1.0G
   CGroup: /system.slice/jenkins.service
           ├─1669 java -jar /www/wwwroot/myblog/myblog.jar --server.port=443
           └─2661 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=tru>

Jun 25 21:37:25 iZ2vc1e3nnjpo1cayr4utfZ systemd[1]: Starting LSB: Jenkins Automation Server...
Jun 25 21:37:25 iZ2vc1e3nnjpo1cayr4utfZ runuser[1742]: pam_unix(runuser:session): session opened f>
Jun 25 21:37:28 iZ2vc1e3nnjpo1cayr4utfZ runuser[1742]: pam_unix(runuser:session): session closed f>
Jun 25 21:37:28 iZ2vc1e3nnjpo1cayr4utfZ jenkins[1712]: Starting Jenkins [  OK  ]
Jun 25 21:37:28 iZ2vc1e3nnjpo1cayr4utfZ systemd[1]: Started LSB: Jenkins Automation Server.

Jenkins 默认的侦听端口是8080,通过浏览器输入 ubuntuvm1 虚拟服务器地址和8080端口即可访问。首次访问需要解锁,请按屏幕提示操作。例如,从虚拟机里面查到密码是 “2bcb508f031743d5ada3fefb93e3167d”,将它填写在 “Administrator password” 输入框里,再按 “Continue” 按钮提交。

Jenkins自动化部署gitee项目到阿里云ECS服务器

选择让 Jenkins 加载常用的插件。

Jenkins自动化部署gitee项目到阿里云ECS服务器

Jenkins配置

1、修改Jenkins默认端口

默认端口是8080,该端口经常被使用,因此换一个不常用端口用来访问Jenkins,通过vim编辑器修改Jenkins默认访问端口

vim /etc/sysconfig/jenkins

为了方式权限出现Permission Denied这个问题,可将JENKINS_USER设置为root用户

Jenkins自动化部署gitee项目到阿里云ECS服务器

2、插件安装

前往 Manage Jenkins -> Manage Plugins -> Available,在 Filter 中搜索 Gitee:

Jenkins自动化部署gitee项目到阿里云ECS服务器

下方可选列表中勾选 Gitee(如列表中不存在 Gitee,则点击 Check now 更新插件列表),然后点击“Download now and install after restart”。

Jenkins自动化部署gitee项目到阿里云ECS服务器

在安装页面勾选“Restart Jenkins when installation is complete and no jobs are running”
安装完之后,可以在 “installed” 页面看到 Gitee 插件

Jenkins自动化部署gitee项目到阿里云ECS服务器

3、Gitee插件配置

1)前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee 配置 -> Gitee 链接

Jenkins自动化部署gitee项目到阿里云ECS服务器

2)在 链接名 中输入 Gitee 或者你想要的名字

3)Gitee 域名 URL 中输入码云完整 URL地址: https://gitee.com (码云私有化客户输入部署的域名)

4)证书令牌 中如还未配置码云 APIV5 私人令牌,点击 Add - > Jenkins

Domain 选择 全局凭据
Kind 选择 Gitee API 令牌
Scope 选择你需要的范围
Gitee API Token 输入你的码云私人令牌,获取地址:https://gitee.com/profile/personal_access_tokens
ID, Descripiton 中输入你想要的 ID 和描述即可。

Jenkins自动化部署gitee项目到阿里云ECS服务器

5)Credentials 选择配置好的Gitee API Token

Jenkins自动化部署gitee项目到阿里云ECS服务器

6)点击 Advanced ,可配置是否忽略 SSL 错误(适您的Jenkins环境是否支持),并可设置链接测超时时间(适您的网络环境而

Jenkins自动化部署gitee项目到阿里云ECS服务器

7)点击Test Connection,查看是否能够访问,如失败请检查以上 3,5,6 步骤。

Jenkins自动化部署gitee项目到阿里云ECS服务器

4、配置其它插件

1)进入global tool configuration

Jenkins自动化部署gitee项目到阿里云ECS服务器

2)配置jdk、maven、Git插件

Jenkins自动化部署gitee项目到阿里云ECS服务器

Jenkins自动化部署gitee项目到阿里云ECS服务器

5、配置Global Environment

1)点击进入系统设置

Jenkins自动化部署gitee项目到阿里云ECS服务器

2)添加全局变量

Jenkins自动化部署gitee项目到阿里云ECS服务器

项目部署

1、新建项目

Jenkins自动化部署gitee项目到阿里云ECS服务器

项目创建成功:

Jenkins自动化部署gitee项目到阿里云ECS服务器

2、配置项目

Jenkins自动化部署gitee项目到阿里云ECS服务器

1)Gitee Connection选中上面建好的gitee api token

Jenkins自动化部署gitee项目到阿里云ECS服务器

2)配置git远程仓库

Jenkins自动化部署gitee项目到阿里云ECS服务器

3)添加Credentials(因为仓库是码云的,这里配置登录码云的用户名及密码)

Jenkins自动化部署gitee项目到阿里云ECS服务器

远程仓库配置完毕,自动刷新(配置完了不会报错的,如果报错,请参考文章末尾的遇到问题)

Jenkins自动化部署gitee项目到阿里云ECS服务器

4、编写脚本设置项目定时构建时间(设置触发器)

Jenkins自动化部署gitee项目到阿里云ECS服务器

5、编写命令构建项目

编写项目构建命令:

#echo "输出PATH变量"
#echo $PATH

# 重新打包
echo "开始重新打包"
mvn clean install
echo "打包完毕"

whoami

echo "准备重启"
# 找到之前项目jar包进程ID并杀死
pid=`ps -ef | grep myblog.jar | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
   kill -9 $pid
fi
echo "停止运行"

#转移到tomcat webapps目录下
cp target/myblog.jar /www/wwwroot/myblog

# 后台运行项目jar包
nohup java -jar /www/wwwroot/myblog/myblog.jar --server.port=443 >myblog.log 2>&1 &

Jenkins自动化部署gitee项目到阿里云ECS服务器

项目配置完毕。

3、构建项目

项目配置完了,接下来就开始构建项目

1)Build Now

Jenkins自动化部署gitee项目到阿里云ECS服务器

2)进入终端查看输出

Jenkins自动化部署gitee项目到阿里云ECS服务器

4、项目构建成功

Jenkins自动化部署gitee项目到阿里云ECS服务器

构建成功啦,因为是个博客项目,接下来可以访问一下:https://caifl.top

如果遇到问题,参考下面的遇到问题

遇到问题:

1、cp: cannot create regular file ‘/usr/local/tomcat/tomcat-9.0.41/webapps/myblog.war’: Permission denied

问题描述:

cp: cannot create regular file '/usr/local/tomcat/tomcat-9.0.41/webapps/myblog.war': Permission denied

Jenkins自动化部署gitee项目到阿里云ECS服务器

# 尝试通过chmod命令进行授权
chmod 777 /usr/local/tomcat

如果不行,则修改Jenkins用户

vim /etc/sysconfig/jenkins

Jenkins自动化部署gitee项目到阿里云ECS服务器

2、Non-resolvable parent POM for com.cfl:MyBlog:1.0.0: Could not transfer artifact org.springframework.

问题描述:

Non-resolvable parent POM for com.cfl:MyBlog:1.0.0: Could not transfer artifact org.springframework.

问题原因:

pom文件有两个org.springframework.boot包的依赖

解决:

删除重复的那个依赖

Jenkins自动化部署gitee项目到阿里云ECS服务器

3、tomcat启动一闪而过

问题描述:

tomcat启动之后一闪而过,直接停止运行

Jenkins自动化部署gitee项目到阿里云ECS服务器

查看logs目录下的日志:

Error: Could not find or load main class org.apache.catalina.startup.Bootstrap
Error: Could not find or load main class org.apache.catalina.startup.Bootstrap
Error: Could not find or load main class org.apache.catalina.startup.Bootstrap
Error: Could not find or load main class org.apache.catalina.startup.Bootstrap
Error: Could not find or load main class org.apache.catalina.startup.Bootstrap
Error: Could not find or load main class org.apache.catalina.startup.Bootstrap
Error: Could not find or load main class org.apache.catalina.startup.Bootstrap

问题原因:原因不明,可能是tomcat压缩包是src版本而非bin版本,亦或者是其它环境问题

解决办法:重新下载tomcat-9.0.48-bin.tar.gz安装包

4、Jenkins - mvn: command not found

问题描述:Jenkins - mvn: command not found,Jenkins部署构建项目时,console output显示mvn 命令无法找到

问题原因:

Linux对于java或maven的路径的环境变量是放在/etc/profile中的, 而/etc/profile只有在用户登录的时候才会被load,Jenkins在运行命令时,使用的是Non-login的方式,而这种方式在运行命令时,/etc/profile是不会被load进来的,所以jenkins只能在当前路径下寻找可执行文件.

解决办法:

在Jenkins的设置中可以设置全局变量, jenkins主页面->Manage Jenkins->Configure System->Global Properties 中, 将Environment variables复选框选中,会出来List of variables, 填入以下内容:

  • name: JAVA_HOME value:XXX
  • name: M2_HOME value:/usr/cyz/apache-maven-3.6.1
  • name: PATH+EXTRA value: $M2_HOME/bin

注意最后标红的 PATH+EXTRA, 这表示PATH=EXTRA:$PATH, 即扩展当前的PATH变量.
设置之后build成功.

Reference

上一篇:项目快速部署上云,带你玩转ECS、PolarDB


下一篇:day75-公有云(阿里云部分功能的使用)