转载自 https://segmentfault.com/a/1190000012921606

环境

  • 阿里云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 <your_jenkins_path>:/var/jenkins_home jenkins

将之前的目录挂载为数据卷。<your_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 <username>@<host>

需要修改目标服务器的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 <node> || true \
&& sudo docker rm <node> || true \
&& cd /var/jenkins_node/workspace/<node> \
&& sudo docker build --rm --no-cache=true -t <node> - < Dockerfile \
&& sudo docker run -d --name <node> -p 3000:3000 -v
/var/jenkins_node/workspace/node:/home/project <node>

端口设置的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://<you_host>:<port>/job/<object_name>/build?token=<API 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 <container_name> <image_name> /bin/bash,进入容器后手动运行CMD,看看日志输出。另,docker exec -t <container_name> /bin/bash可以进入运行中的容器,能方便的查看代码;docker logs <container_name>显示运行的日志输出。

【转】使用Docker+Jenkins自动构建部署的更多相关文章

  1. 使用Docker+Jenkins自动构建部署

    环境 Windows 10 Docker Version 18.06.1-ce-win73 (19507) 运行jenkins 运行jenkins 容器 docker run -d --name ln ...

  2. jenkins自动构建部署

    环境 centos7   tomcat8.5.37   maven3.3.9   jdk8   git1.8.3.1 安装jdk,tomcat,maven,git(环境变量,配置文件什么的自行百度) ...

  3. 实战:向GitHub提交代码时触发Jenkins自动构建

    当我们提交代码到GitHub后,可以在Jenkins上执行构建,但是每次都要动手去执行略显麻烦,今天我们就来实战Jenkins的自动构建功能,每次提交代码到GitHub后,Jenkins会进行自动构建 ...

  4. Ant + Jenkies +Tomcat 自动构建部署Web项目

    前言:博主资历尚浅,很多东西都还在刚起步学习的阶段,这几天开发任务比较轻,就在自己window系统下,模拟部署远程服务器,利用Jenkies + Ant + Tomcat 搭建了一个自动发布部署的环境 ...

  5. Gitlab源码库里代码提交后,如何触发jenkins自动构建?

    版本库里代码提交后,如何触发jenkins自动构建?这是一个面试题,感觉自己回答的并不好,因为并没有用过这个功能,之前公司实际项目用的是svn版本管理,一般都用立刻构建,和定时任务构建(不管代码是否有 ...

  6. Gitlab使用Webhook实现Push代码后的jenkins自动构建

    本文出自https://www.cnblogs.com/kevingrace/p/6479813.html 怕以后找不到,所以先写到自己博客中 Gitlab利用Webhook实现Push代码后的jen ...

  7. 小伙伴想学Jenkins自动构建发布项目,我:安排上了!!

    写在前面 趁着十一长假,很多小伙伴都在悄悄学习,有些是为了能够顺利通过面试,进入大厂升职加薪.有些则是为了进一步巩固和提高自己的专业技能,希望有朝一日能过成为互联网架构师乃至技术专家.这不,就有小伙伴 ...

  8. DEVOPS技术实践_02:jenkins自动构建项目

    一.用户名密码错误 打开jenkins发现用户名密码错误,解决 1.1 找到config.xml文件 [root@jenkins-master ~]# ll -a drwxr-xr-x. root r ...

  9. 使用jenkins进行项目的自动构建部署

    jenkins 简介 Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目和监控外部调用执行的工作. 官网地址地址: https://je ...

随机推荐

  1. 导入Excel时去除多余的空白行

    https://blog.csdn.net/shuishousuiyue/article/details/44773987 按着上面链接用的第一种方式,如下图所示:第二种方式要遍历每一个Excel单元 ...

  2. wpf ComboBox 获取选中项的文本内容

    一:根据数据源类型获取选中项 类: public class Region { public int REGION_ID { get; set; } public string REGION_CODE ...

  3. [ Tools ] [ MobaXterm ] [ SSH ] [ Linux ] 中文顯示解決

    預設是無法顯示中文的,需要修改連線的 Terminal Setting

  4. 经典C/S服务器模型之守护进程

    linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服务 ...

  5. Spring boot application.properties 配置

    原文链接: http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.ht ...

  6. 搞不懂的算法-排序篇<2>

    上一篇排序算法<1>中,排序算法的时间复杂度从N2到NlgN变化,但他们都有一个共同的特点,基于比较和交换数组中的元素来实现排序,我们称这些排序算法为比较排序算法.对于比较排序算法,所有的 ...

  7. C语言-重写strupr函数

    一.重写函数 Action(){ //重写strupr,小写变大写 char *desc; char *str="123abcd*"; desc=(char *)malloc(10 ...

  8. ie6 中文字符编码 出现的问题解决

    0 前言   公司要求网页要支持ie6.7.8,结果我的设备在ie7.8.9均工作正常,而在ie6时就出现各种奇怪的错误,在这个背景下,开始动手解决网页不兼容ie6的情况.   1 搭建ie6的实验平 ...

  9. RabbitMQ学习之spring配置文件rabbit标签的使用

    下面我们通过一个实例看一下rabbit的使用. 1.实现一个消息监听器ReceiveMessageListener.Java package org.springframework.amqp.core ...

  10. jmeter出现乱码怎么解决

    本文是抄袭安大叔的性能    如果想在性能获得更好的发展  请添加公众号:测试那点事  大叔的群号:435092293  大叔曾经担任百度技术总监  很牛逼  相信大叔知道了不会怪我  毕竟我是你的学 ...