(二期)14、持续集成工具jenkins
持续集成
持续交付
持续部署
持续
集成,
部署,
交付,
export JAVA_HOME=/opt/jdk1.8.0_161
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
https://maven.apache.org/download.cgi
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz
export MAVEN_HOME=/opt/apache-maven-3.5.3
export PATH=${MAVEN_HOME}/bin:$PATH
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
wget https://www.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz
tar xzf git-1.8.3.1.tar.gz
cd git-1.8.3.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install
echo "export PATH=$PATH:/usr/local/git/bin" >>/etc/bashrc
source /etc/bashrc
git --version
- http://www.runoob.com/mysql/mysql-install.html
grep 'temporary password' /var/log/mysqld.log
ALTER USER 'root'@'localhost' IDENTIFIED BY 'admin';
wget http://mirrors.shu.edu.cn/jenkins/war-stable/2.121.1/jenkins.war
- 第一种是把war包放到tomcat的webapps目录下运行;
- 第二种是直接通过java -jar来启动项目,因为jenkins.war包里面已经内置了jetty服务器,可以直接启动,通过--httpPort来指定启动端口,添加&表示以服务形式启动。
java -jar jenkins.war --httpPort=8081 &
cat /root/.jenkins/secrets/initialAdminPassword
- 一个构建maven项目插件
- 一个发布到tomcat的插件
- 新建一个maven项目。
- 配置git或者svn地址,jenkins会自动从远程仓库拉去最新代码。
- 开始maven打包构建的命令,可以去掉test测试
clean install -Dmaven.test.skip=true -Ptest
- 经过上一个步骤之后,jenkins会在默认路径/root/.jenkins/workspace/上看到打包的项目,/root/.jenkins/workspace/homework/target目录下有打包的jar文件。spring-boot-homework-0.0.1-SNAPSHOT.jar。因此我们打包完成之后的工作就是要替换原来的jar文件,然后重启项目。
- DIR表示存放jar文件、和启动项目的文件夹。JAEFILE是指jar包的名称。
- 接下来的工作其实就是杀掉原来的spring-boot-homework-0.0.1-SNAPSHOT.jar进程
- 备份原来的jar包
- 把新生成的jar覆盖原来的
- 然后java -jar启动项目
- BUILD_ID=dontKillMe表示jenkins不杀掉衍生的线程
- nohup表示不用提示
echo '开始启动项目~~~~~~~~~'
DATE=$(date +%Y%m%d_%H%M)
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/opt/jdk1.8.0_181
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
DIR=/opt/jar
JARFILE=spring-boot-homework-0.0.1-SNAPSHOT.jar
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR
ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9
mv $JARFILE backup/$JARFILE$DATE
mv -f /root/.jenkins/workspace/homework/target/$JARFILE .
BUILD_ID=dontKillMe nohup java -jar $JARFILE > out.log &
if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi
cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
echo '结束启动项目~~~~'
- 首先创建maven项目
- 配置项目的git仓库地址
- 配置maven构建命令(打包命令)
- 打包文成之后执行shell实现切换jar,重新部署项目。
- 配置ssh免密登录
jenkins服务器
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub 47.106.38.101
service sshd restart
cd target/
scp spring-boot-homework-0.0.1-SNAPSHOT.jar 127.0.0.1:/opt/jar/target/
ssh 127.0.0.1 "cd /opt/jar; ./republish.sh;"
DATE=$(date +%Y%m%d_%H:%M:%S)
export JAVA_HOME PATH CLASSPATH
JAVA_HOME=/opt/jdk1.8.0_181
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
DIR=/opt/jar
JARFILE=spring-boot-homework-0.0.1-SNAPSHOT.jar
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
cd $DIR
ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9
mv $JARFILE backup/$JARFILE$DATE
mv -f /opt/jar/target/$JARFILE .
java -jar $JARFILE > out.log &
if [ $? = 0 ];then
sleep 30
tail -n 50 out.log
fi
cd backup/
ls -lt|awk 'NR>5{print $NF}'|xargs rm -rf
另一种方法,还没测试成功。(暂时放弃)---------------------------------------------------------
- Passphrase 不用设置
- Path to key 写上生成的ssh路径:/root/.ssh/id_rsa
- Name 随意起名代表这个服务,待会要根据它来选则
- Hostname 配置应用服务器的地址
- Username 配置linux登陆用户名
- Remote Directory 不填
- 新建一个maven构建项目home_server_split。复制之前的项目配置。
- Source files配置:target/xxx-0.0.1-SNAPSHOT.jar 项目jar包名
- Remove prefix:target/
- Remote directory:代码应用服务器的目录地址,
- Exec command: 应用服务器对应的脚本。
此种方法,还没测试成功。(暂时放弃)---------------------------------------------------------
- https://blog.csdn.net/zhoucheng05_13/article/details/77915294
- 下添加如下代码
<role rolename="tomcat"/>
<role rolename="manager-script"/>
<role rolename="manager"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="admin" password="123456" roles="admin,admin-gui,manager-gui,manager-script,manager-gui"/>
- tomcat8和tomcat9还需要在打开webapps/manager/META-INF/context.xml,把一行代码注释掉,如图:
- https://my.oschina.net/xwzj/blog/900463
- WAR/EAR files:是war包的相对路径,如target/xxx.war
- content path:Tomcat的发布路径,即项目的上下文,用于访问项目。如http://localhost:8080/heo,heo
- 即为content path。
- contaners :发布到的容器,主要可发布到tomcat、jboss、GlassFish
- deploy on failure:发生错误的时候是否发布到tomcat
- https://gitee.com/oschina/Gitee-Jenkins-Plugin
- 首先jenkins安装gitee插件,实现自动部署插件
- 添加码云链接配置
- 前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
- 在 Connection name 中输入 Gitee 或者你想要的名字
- (码云私有化客户输入部署的域名)
- Credentials 中如还未配置码云 APIV5 私人令牌,点击 Add - > Jenkins
- Domain 选择 Global credentials
- Kind 选择 Gitee API Token
- Scope 选择你需要的范围
- https://gitee.com/profile/personal_access_tokens
- ID, Descripiton 中输入你想要的 ID 和描述即可。
- Credentials 选择配置好的 Gitee APIV5 Token
- 点击 Advanced ,可配置是否忽略 SSL 错误(适您的Jenkins环境是否支持),并可设置链接测超时时间(适您的网络环境而定)
- 点击 Test Connection 测试链接是否成功,如失败请检查以上 3,5,6 步骤。