内容简介:环境: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的项目名称保持一致),选择第一个“构建一个自由风格的软件项目”,然后点击确定:
-
返回首页,可以列表中看到刚刚新建的任务,点击名称,进入任务详情:
-
在任务详情页,点击配置,进行项目配置:
配置:
的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,进入任务详情,点击配置,进入配置页:
的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命令简化依赖后台部署的繁杂操作
- 大前端时代下的微前端架构:实现增量升级、代码解耦、独立部署
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Machine Learning in Action
Peter Harrington / Manning Publications / 2012-4-19 / GBP 29.99
It's been said that data is the new "dirt"—the raw material from which and on which you build the structures of the modern world. And like dirt, data can seem like a limitless, undifferentiated mass. ......一起来看看 《Machine Learning in Action》 这本书的介绍吧!