jenkins实现html自动化上线
将此文章写给我最心爱的女孩
docker部署jenkins教程
1.如果是用docker启动的jenkins,那么首先进入jenkins容器
docker exec -it jenkins bash
2.配置免密上传
在jenkins容器里面运行
# 生成密钥 一路默认回车即可
ssh-keygen
# 然后上传发送指定web服务器,会输入一次密码就好了
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.85.140
3.web服务器安装nginx并启动
服务器安装nginx
安装教程
4.编写shell脚本
这个dir的位置不是服务器的位置,可以在jenkins的job里面查看工作空间,所以取前面的jenkins容器路径,容器挂载之后是在/home/jenkins/jenkins_mount里面
#!/bin/bash
#这个脚本的位置在jenkins的挂载目录下
# /home/jenkins/jenkins_mount:这个是挂载的位置,进去创建一个scripts文件夹 mkdir scripts,将脚本放在这里面
# /home/jenkins/jenkins_mount/scripts
# 还需要在/home/jenkins/jenkins_mount里面创建一个data文件夹,并给777权限,用来存放打包的tar.gz文件
# mkdir data
# chmod 777 data
# 运行脚本需要传递的两个参数 一个是名称 一个是版本
project=$1
tag=$2
# web服务器的ip地址
IP="192.168.85.140"
# 要打包代码的位置
dir="/var/jenkins_home/workspace/HtmlTest"
# 打包命令
tar zcf /var/jenkins_home/data/${project}-${tag}.tar.gz -C ${dir} *
#对web主机操作
# 通过for循环依次发送文件
for n in `echo $IP`
do
scp /var/jenkins_home/data/${project}-${tag}.tar.gz root@${n}:/data
# 连接web服务器操作 创建/code/项目名文件夹,然后解压代码并将代码放在/code里面,然后删除nginx的html里面的东西,通过软连接实现访问html代码
ssh root@$n "mkdir -p /code/${project}-${tag} && \
tar xf /data/${project}-${tag}.tar.gz -C /code/${project}-${tag} && \
rm -rf /usr/local/nginx/html && \
chmod 755 -R /code/ && \
ln -s /code/${project}-${tag} /usr/local/nginx/html"
done
挂载目录
[root@npy jenkins_mount]# ls
com.cloudbees.hudson.plugins.folder.config.AbstractFolderConfiguration.xml jenkins.plugins.git.GitHooksConfiguration.xml
com.dabsquared.gitlabjenkins.connection.GitLabConnectionConfig.xml jenkins.security.apitoken.ApiTokenPropertyConfiguration.xml
com.dabsquared.gitlabjenkins.GitLabPushTrigger.xml jenkins.security.QueueItemAuthenticatorConfiguration.xml
config.xml jenkins.security.ResourceDomainConfiguration.xml
copy_reference_file.log jenkins.security.UpdateSiteWarningsConfiguration.xml
credentials.xml jenkins.tasks.filters.EnvVarsFilterGlobalConfiguration.xml
data jenkins.telemetry.Correlator.xml
fingerprints jobs
github-plugin-configuration.xml logs
hudson.maven.MavenModuleSet.xml nodeMonitors.xml
hudson.model.UpdateCenter.xml nodes
hudson.plugins.build_timeout.global.GlobalTimeOutConfiguration.xml org.jenkinsci.plugins.dockerbuildstep.DockerBuilder.xml
hudson.plugins.build_timeout.operations.BuildStepOperation.xml org.jenkinsci.plugins.gitclient.GitHostKeyVerificationConfiguration.xml
hudson.plugins.emailext.ExtendedEmailPublisher.xml org.jenkinsci.plugins.github_branch_source.GitHubConfiguration.xml
hudson.plugins.git.GitSCM.xml org.jenkinsci.plugins.workflow.flow.GlobalDefaultFlowDurabilityLevel.xml
hudson.plugins.git.GitTool.xml org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml
hudson.plugins.gradle.injection.InjectionConfig.xml plugins
hudson.plugins.timestamper.TimestamperConfig.xml queue.xml
hudson.tasks.Mailer.xml queue.xml.bak
hudson.tasks.Shell.xml scriptApproval.xml
hudson.triggers.SCMTrigger.xml scripts
identity.key.enc secret.key
io.jenkins.plugins.junit.storage.JunitTestResultStorageConfiguration.xml secret.key.not-so-secret
jenkins.fingerprints.GlobalFingerprintConfiguration.xml secrets
jenkins.install.InstallUtil.lastExecVersion updates
jenkins.install.UpgradeWizard.state userContent
jenkins.metrics.api.MetricsAccessKey.xml users
jenkins.model.ArtifactManagerConfiguration.xml war
jenkins.model.GlobalBuildDiscarderConfiguration.xml workflow-libs
jenkins.model.JenkinsLocationConfiguration.xml workspace
[root@npy jenkins_mount]#
5.挂载目录中创建scripts文件夹
然后把shell脚本放进去
mkdir scripts
[root@npy scripts]# ls
auto_update.sh
[root@npy scripts]# pwd
/home/jenkins/jenkins_mount/scripts
[root@npy scripts]# cat auto_update.sh
#!/bin/bash
#执行脚本默在这个目录下
# cd /root/.jenkins/workspace/shops/shop
project=$1
tag=$2
IP="192.168.85.140"
# 打包位置
dir="/var/jenkins_home/workspace/HtmlTest"
tar zcf /var/jenkins_home/data/${project}-${tag}.tar.gz -C ${dir} *
#web主机操作
for n in `echo $IP`
do
scp -rp /var/jenkins_home/data/${project}-${tag}.tar.gz root@${n}:/data
ssh root@$n "mkdir -p /code/${project}-${tag} && \
tar xf /data/${project}-${tag}.tar.gz -C /code/${project}-${tag} && \
rm -rf /usr/local/nginx/html && \
chmod 755 -R /code/ && \
ln -s /code/${project}-${tag} /usr/local/nginx/html"
done
6.在挂载目录中创建创建data文件夹
增加权限,以后打包的项目就会放在这个里面
mkdir data
chmod 777 data
7.jenkins构建
进入jenkins界面,点击要配置的项目->配置
在里面选择shell脚本,然后写运行脚本的命令
再提醒一次,这个根路径是相对于jenkins来说的,上面可以找到根路径
第一个参数香Job名称,第二个参数是版本号,可修改
pwd
tag="v1.0.0"
sh /var/jenkins_home/scripts/auto_update.sh $JOB_BASE_NAME $tag
8.立即构建
构建之后成为绿色的就没问题了
9.访问
构建之后发送到web服务器的位置,然后输入web服务器的ip以及nginx配置的端口就可以访问了
http://192.168.85.140:80