内容简介:环境:ubuntu、docker、git基于docker,不熟悉的可以先看看我的上一篇=================================================
环境:ubuntu、 docker 、git
$ cat /etc/issue Ubuntu 16.04.6 LTS \n \l 复制代码
基于docker,不熟悉的可以先看看我的上一篇 前端之路:紧跟潮流,docker简单应用
-
拉去镜像
-
$ docker pull jenkinsci/blueocean
-
-
根据拉取的Jenkins镜像启动一个容器
$ docker run \ -d \ --name jenkins \ -u root \ -p 49001:8080 \ -v /var/jenkins_home:/var/jenkins_home \ -v /var/jenkins_ssh:/root/.ssh \ -v /var/run/docker.sock:/var/run/docker.sock \ jenkinsci/blueocean 复制代码
解释:
-
-d
:守护模式,在后台运行。 -
-p
:端口映射,49001是服务器端口(可根据自己情况更改,别忘记安全组开放端口),8080是容器端口(jenkins程序默认端口)。 -
-v
:挂载数据卷,/var/jenkins_home:/var/jenkins_home
:将Jenkins目录挂载到宿主机;/var/jenkins_ssh:/root/.ssh
:将Jenkins的ssh挂载到宿主机,备份用,防止重启后丢失找不到。
-
-
查看容器运行情况:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 08a54d4a804a jenkinsci/blueocean "/sbin/tini -- /usr/…" 7 days ago Up 7 days 50000/tcp, 0.0.0.0:49001->8080/tcp jenkins 复制代码
附图:
以上说明已成功,若容器意外退出,去掉-d 参数执行,查看log来排错。
-
现在开始设置Jenkins,在浏览器访问
你的服务器ip:49001
,会出现以下界面:-
想进入要先解锁,密码就在
/var/jenkins_home/secrets/initialAdminPassword
文件里,怎么查看呢?两种方案:- 首先要进入刚刚启动的jenkins容器里面,执行
$ docker exec -it jenkins bash
,然后$ cat /var/jenkins_home/secrets/initialAdminPassword
。 - 由于运行容器时,已经将Jenkins目录挂载到了宿主机,所以可以不用进入容器,直接在宿主机执行
$ sudo cat /var/jenkins_home/secrets/initialAdminPassword
。
- 首先要进入刚刚启动的jenkins容器里面,执行
-
将上一步的密码复制到浏览器,点击continue按钮进行下一步。 附图:
-
安装插件,选择推荐安装即可。
-
=================================================
上面是基本的安装,我用的是时候官方文档还是英文的,目前支持中文,想了解更详细内容,请去官网,下面开始教大家新建一个 自由构建的任务 (鉴于目前网上大都是多机教程,即项目和jenkins不在一台服务器上,又考虑到小伙伴们手中可能只有一台自己的机器,所以我下面要讲的是 单机运行项目和Jenkins )
=================================================
-
打开
ip:49001
进入首页,点击系统管理: -
首先点击插件管理,搜索并安装一下插件(若已安装列表已存在可忽略):
- Build Name Setter
- Dingding[钉钉] Plugin
- Build Timestamp Plugin
- Git Parameter Plug-In
- Publish Over SSH
- SSH Slaves plugin
- Timestamper
-
然后点击系统设置:
-
找到
Build Timestamp
(上面的插件提供的),进行如下设置:- Asia/Shanghai
- yyyy-MM-dd-HH-mm-ss-SSS
-
找到
Publish over SSH
,这个相对麻烦些,进行如下设置:说明:
- Passphrase:SSH的password。有两种情况:1. 使用username/password登录时为username的password;2. 使用私钥登录时为私钥的password。
- Path to key:SSH私钥的文件路径。可以是绝对路径,也可以是相对$JENKINS_HOME的相对路径。
- Key:私钥,私钥导出后的文本内容,假设“Key”和“Path to key”都设置,则“Key”的优先级较高,此时“Passphrase”中设置的内容应该是私钥的password。
- Disable exec:禁止在目标机上运行命令,勾选后将会忽略在Job配置中“Exec command”选项中设置的命令。
补充:由于Jenkins是在docker容器中运行的,所以上面的配置应该是容器的ssh配置,而不是宿主机的。如上图,我是通过ssh私钥进行的登陆。
步骤:
-
$ docker exec -it jenkins sh
,进入容器。 -
$ ssh-keygen -m PEM -t rsa -b 4096
,生成ssh私钥及公钥(默认在~/.ssh
即/root/.ssh
目录中),可以一路回车,若设密码的话,需在“Passphrase”中填写。 -
$ cat ~/.ssh/id_rsa
,查看私钥,把私钥copy到上图的“key”设置中。 -
$ cat ~/.ssh/id_rsa.pub
,查看公钥,把公钥copy到宿主机的~/.ssh/authorized_keys
中。
至此,Jenkins的ssh配置就完成了,接下来要配置远程机(咱们是单机,所以宿主机就当成远程机来配置)的SSH Servers了:
说明:
- Name:SSH节点配置的名称,可随意设置,他将在job配置的“SSH Server”的下拉列表中,如图:
- Hostname:通过SSH连接到的机器的主机名或IP。
- Username:SSH服务使用的username,使用key进行连接时为key指定的username。
- Remote Derictory:运程机器上真实存在的文件夹,而且“Username”指定的用户要有訪问此文件夹的权限。插件将把文件传送到此文件夹下。一般是存放项目的目录。
-
-
测试,点击“Test Configuration”按钮,如success,这配置成功,进行下一步,新建任务。
下面开始新建任务:
-
在首页点击“新建任务”,输入名称(建议和github的项目名称保持一致),选择第一个“构建一个自由风格的软件项目”,然后点击确定:
-
返回首页,可以列表中看到刚刚新建的任务,点击名称,进入任务详情:
-
在任务详情页,点击配置,进行项目配置:
配置:
补充:(shell脚本都在 项目的deploy目录下)
-
Exec command:
#!/usr/bin/env bash echo '************************************** 发送至服务器成功 **********************************************' # 项目名,取自环境变量 projectName="${JOB_NAME}" dockerImageName=${projectName}-${BUILD_TIMESTAMP} # step1 解压源代码 echo " ************************************* 解压源代码${dockerImageName}.tar.gz start *************************************" projectPath='/var/nodejs/' # 需要单独给用户赋目录/var/nodejs/的权限 sudo chown ubuntu /var/nodejs/ sudo mkdir -p ${projectPath}${projectName} || true \ && cd ${projectPath}${projectName} \ && sudo rm -rf * # 删除里面的数据 sudo tar -zxf ../${dockerImageName}.tar.gz -C ./ \ && sudo rm ../${dockerImageName}.tar.gz # 删除发布过来的包 echo " ************************************* 解压源代码${dockerImageName}.tar.gz finish *************************************" # step2 构建docker镜像 echo " ************************************* 构建docker镜像${dockerImageName} start *************************************" sudo docker build -t ${dockerImageName} --force-rm . echo ' ************************************* 构建docker镜像 finish *************************************' # step3 重启容器 echo "************************************* 使用镜像${dockerImageName}启动容器${projectName} start *************************************" # 错误日志统一存放在/var/nodejs/logs/${projectName} sudo mkdir -p /var/nodejs/logs/${projectName} || true \ && sudo docker stop ${projectName} || true \ && sudo docker rm ${projectName} || true \ && sudo docker run -d --net=host --name ${projectName} -v /var/nodejs/logs/${projectName}:/var/nodejs/${projectName}/logs ${dockerImageName} echo "************************************* 使用镜像${dockerImageName}启动容器${projectName} finish *************************************" echo '************************************************ 查看docker容器情况: ************************************************ ' sudo docker ps -a echo '************************************************ 查看docker容器情况: ************************************************ ' 复制代码
-
如果项目需要在容器里构建,通常初次构建时间相对较长,所以可以把高级设置中的“Exec timeout”设的稍微大一些。
-
构建-执行shell-命令:
#!/usr/bin/env sh projectName="${JOB_NAME}" dockerImageName=${projectName}-${BUILD_TIMESTAMP} echo '*********************************** 准备打包从Github仓库拉取的代码...*********************************************' echo "**********${WORKSPACE}**********" tar --exclude=node_modules --exclude=.git --exclude='*.tar.gz' -vzcf /tmp/${dockerImageName}.tar.gz -C ${WORKSPACE} . \ && mv /tmp/${dockerImageName}.tar.gz ${WORKSPACE} \ && echo '*********************************** 打包成功 *********************************************' \ && echo '************************************** 准备发送至服务器... **********************************************' 复制代码
-
构建后操作, 钉钉通知配置教程
-
-
完成项目的任务配置,点击保存。
-
返回任务详情也,点击“Build with Parameters”,选择分支,点击“开始构建”:
-
在构建历史列表中,点击最新的一条构建记录,再点“击控制台输出”,可查看构建的log:
最终log输出:Finished: SUCCESS,则成功。v 构建后,钉钉会收到通知。
如果有问题,需要版本回滚怎么办呢?
我们可以新建一个任务用于版本回滚:
-
回到首页,点击新建,起个名字如:newblog-rollback。
-
在列表点击newblog-rollback,进入任务详情,点击配置,进入配置页:
补充:(shell脚本都在 项目的deploy目录下)
-
Exec command:
#!/usr/bin/env sh trim() { trimmed=$1 trimmed=${trimmed%% } trimmed=${trimmed## } echo "$trimmed" } # projectName=$(trim "${container_name}") projectName="newblog" dockerImageName=$(trim "${image_name}") echo "******************************************* 回退到镜像${image_name} ,并启动容器${container_name} **************** *******************************" sudo mkdir -p /var/nodejs/logs/${projectName} || true \ && sudo docker stop ${projectName} || true \ && sudo docker rm ${projectName} || true \ && sudo docker run -d --net=host --name ${projectName} -v /var/nodejs/logs/${projectName}:/var/nodejs/${projectName}/logs ${dockerImageName} echo "************************************* 使用镜像${dockerImageName}启动容器${projectName} finish *************************************" 复制代码
-
-
测试版本回滚,首先,你要知道要回退到哪个版本,在newblog任务列表中copy你要回退的镜像名:
最终log输出:Finished: SUCCESS,则成功。
最终成果: http://140.143.0.171:8080
【参考】:
=== 文中不足,欢迎指正 ===
===内容有点多,自我感觉写的不好,但不知怎么优化,有好的建议欢迎提===
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 【前端打包部署】谈一谈我在SPA项目打包=>部署的处理
- 如何使用 docker 部署前端应用
- 前端自动化部署方案探索
- 前端工程化:构建、部署、灰度
- 前端项目无独立部署环境时,使用shell命令简化依赖后台部署的繁杂操作
- 大前端时代下的微前端架构:实现增量升级、代码解耦、独立部署
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。