资讯专栏INFORMATION COLUMN

使用Docker+Jenkins自动构建部署

qc1iu / 1899人阅读

摘要:使用自动构建部署环境阿里云,宿主机服务器安装,在安全规则中确认端口开启。完毕后,根据提示设置登陆账户。至此,完成自动化的构建和部署。当你推送代码后就会实现自动构建,部署。容器出错的是镜像构建和镜像运行,以及容器间通信的问题。

使用Docker+Jenkins自动构建部署 环境

阿里云ESC,宿主机服务器安装Docker,在安全规则中确认8080端口开启。

客户端mac

运行jenkins 运行jenkins容器

在主机上创建目录,并添加读写权限以便jenkins应用运行时读写文件,如:

$ mkdir -p /var/jenkins_node
$ chmod 777 /var/jenkins_node

拉取jenkins镜像:docker pull jenkins,当前是2.60.3版。并运行:

docker run -d --name myjenkins -p 8080:8080 -p 50000:50000 -v :/var/jenkins_home jenkins

将之前的目录挂载为数据卷。替换为你的目录名,路径需要是绝对路径。
等待几十秒,查看jenkins_node目录,确认是否有jenkins应用生成的文件。
通过http://you_host:8080登陆查看。是否出现Getting Started界面。

设置账户及SSH登陆

在Getting Started界面会需要初始的密码Unlock Jenkins。
密码会在输出终端,也可根据页面提示到容器的jenkins_home中查找。
所以你可以

docker logs myjenkins
# 或者进入容器
docker exec -t myjenkins /bin/bash

有了密码,输入后安装建议的插件。
完毕后,根据提示设置登陆账户。

安装Publish Over SSH插件

首页 -> 点击系统管理 -> 管理插件 ->可选插件 -> 过滤:ssh -> 选择Publish Over SSH插件,点击直接安装。

设置服务器SSH信息

首先在容器中生成rsa密钥:

# 从宿主机客户进入容器,目前容器名myjenkins,也可通过docker ps 查看
$ docker exec -it myjenkins /bin/bash
# 进入容器后建立.ssh目录,创建密钥文件私钥id_rsa,公钥id_rsa.pub
~ mkdir ~/.ssh && cd ~/.ssh
~ ssh-keygen -t rsa
# 一直回车即可

添加公钥到宿主机
将id_rsa.pub中字符串添加到authorized_keys文件末尾,重启ssh服务sudo service ssh restart
注意宿主机是否开启ssh服务。
可以在容器终端中使用下面的命令添加到宿主机中。也可手动复制id_rsa.pub到宿主机的.ssh/authorized_keys文件中。

ssh-copy-id -i ~/.ssh/id_rsa.pub @

需要修改目标服务器的ssh配置文件,配置文件为/etc/ssh/sshd_config。设置ssh-server允许使用私钥和公钥对的方式登录,然后使用sudo /etc/init.d/ssh restart命令重启ssh服务。

添加私钥
jenkins首页,系统管理 -> 系统设置 -> 下拉,找到Publish over SSH,填写Key 和 SSH Server -> 保存

高级选项能够配置ssh服务器端口和超时。Test可测试,显示success配置成功。

项目配置

首先,新建一个任务。填写项目名称。
选择源码管理为:Git,填写项目库的URL。私有项目需要添加Git账号。

构建环境:选择Send files or execute commands over SSH after the build runs,选择服务器,以及添加Exec command。保存。

# 根据你的项目需要编写
sudo docker stop  || true 
    && sudo docker rm  || true 
    && cd /var/jenkins_node/workspace/ 
    && sudo docker build --rm --no-cache=true  -t   - < Dockerfile 
    && sudo docker run -d  --name  -p 3000:3000 -v 
    /var/jenkins_node/workspace/node:/home/project 

端口设置的3000,也可以另行设置-p 宿主机端口:容器端口,记得确认服务器端口权限是否开启。

Dockerfile

# 根据你的项目需要编写
FROM node
RUN mkdir -p /var/www/html/ 
RUN npm install -g yarn
WORKDIR /var/www/html
EXPOSE 3000
CMD ["npm","start"]

ps: npm install -g cnpm --registry=https://registry.npm.taobao.org

返回首页,选择项目,立即构建。成功后可以通过http://you_host:3000端口查看项目。

配置webhook

配置webhook,实现自动部署
获取API tonken:首页 -> 用户 -> 选择当前的用户 -> 设置 -> 在API Tonken 项中点击Show API Token...

添加令牌:返回首页 -> 项目 -> 配置 -> 构建触发器 -> 选择 "触发远程构建" ->粘贴"API Token"内容到"身份验证令牌"
登陆代码托管平台,找到你的项目,选择管理,选择webhook,添加URL,格式http://:/job//build?token=

设置jenkins安全策略

首页 -> 系统管理 -> Configure Global Security ->
授权策略,勾选Allow anonymous read access

至此,完成自动化的构建和部署。当你推送代码后就会实现自动构建,部署。

部署错误查找

代码推送和webhook的问题不大,照着例子写不会出错。
容器出错的是镜像构建和镜像运行,以及容器间通信的问题。

镜像构建:查看jenkins主页-->查看项目-->最近一次的构建历史-->查看Console Output,查看控制台输出。这里可以看到是哪一步出错。一般Sending build context to Docker daemon之前是jenkins命令问题,之后是Dockerfile问题。

镜像运行:如果Console显示镜像构建成功(也可docker images查看),但运行失败,或容器运行后退出,如果代码本地运行良好,一般是CMD启动命令错误,前台运行一下容器,docker run -it --name /bin/bash,进入容器后手动运行CMD,看看日志输出。另,docker exec -t /bin/bash可以进入运行中的容器,能方便的查看代码;docker logs 显示运行的日志输出。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/27204.html

相关文章

  • 使用 Jenkins 自动部署 Docker 服务(二、构建部署篇)

    摘要:如果还没有搭建好可以使用的,请先移步到这篇文章进行搭建使用自动部署服务一搭建篇目标通过实现推送代码后自动部署基于的服务准备工作获取示例项目或者直接复制以下文件内容获取示例项目项目文件页面文件镜像文件部署文件部署脚本文件页面文件项目很简单, 如果还没有搭建好可以使用 Docker 的 Jenkins,请先移步到这篇文章进行搭建 使用 Jenkins 自动部署 Docker 服务(一、Je...

    denson 评论0 收藏0
  • 在Kubernetes上部署和伸缩Jenkins

    摘要:在本教程中,我们将使用在上部署和伸缩。它主要用来帮助操作人员部署伸缩更新和维护服务,以及提供服务发现机制来管理节点集群上的容器化应用程序。代理则使用,网络启动协议启动,因此容器能够在启动和运行之后自动连接到。账户我们将在上部署集群。 在本教程中,我们将使用Rancher在Kubernetes上部署和伸缩Jenkins。按照本文的步骤一步步来,你将会使用到我们用来测试实际构建作业的mas...

    Pines_Cheng 评论0 收藏0
  • Docker + Jenkins + webhooks 自动部署基础实践

    摘要:自动部署基础实践熟悉的基本操作实现本地后自动构建部署服务此实践用于优化自己在实际工作中的工作流在本地开发到服务器登录云服务器或者简化流程后本地开发云服务器自动构建部署本实践将结合技术来实现云服务器对各种环境的切换与部署。 Docker + Jenkins + webhooks 自动部署基础实践 熟悉 jenkins 的基本操作 ☑️ 实现本地 git push 后 jenkins 自...

    Charlie_Jade 评论0 收藏0
  • Jenkins集成Docker镜像实现自动发布

    摘要:集群环境的部署方式使用集群管理工具通过版本新增文件实现滚动升级容器等同于应用的部署 1. 思路&流程 Jenkins集成Docker镜像实现自动发布与Jenkins发布mavne项目思路一样总体流程 为:Jenkins 拉去远端源码 —— gitl实现应用打包 —— jenkins本地把应用程序打包进Docker镜像 ...

    defcon 评论0 收藏0
  • DockerJenkins 到Ansible的部署经验

    摘要:从到到的部署经验工作中,除了开发功能,还负责系统的部署工作。我从频繁的部署工作中,逐渐找到了一些偷懒的方法。同时在构建成功后执行我们输入的命令,来达到自动化部署的工作。缺点也是有的,很难保证对方部署的环境是最新的。 从Docker 到Jenkins 到Ansible的部署经验 工作中,除了开发功能,还负责系统的部署工作。我从频繁的部署工作中,逐渐找到了一些偷懒的方法。从传统的Java ...

    beanlam 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<