sudo apt install apt-transport-https ca-certificates

查看Debian版本选择对应的镜像源

Debian版本介绍:

查看当前操作系统发行版的版本信息。这个命令可以清楚的知道是RedHat还是其他发行版,以及具体的版本号,比如3.4或者5.4等。

cat /etc/os-release

修改镜像文件

vi /etc/apt/sources.list

修改内容如下

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free

Nginx默认会安装在etc目录下,查看Nginx配置文件内容

cat /etc/nginx/nginx.conf

公牛定时插座 小米定时插座 哪个好_空调定时开和定时关_node定时任务

我们看最后红框里的内容,意思就是使用/etc/nginx/conf.d/default.conf文件进行配置。

然后我们可以编辑 /etc/nginx/conf.d/default.conf 文件。

vi /etc/nginx/conf.d/default.conf

配置方法和前面的nginx配置一样,但是我们需要将必要的文件(静态文件、SSL证书)传递给Docker容器

创建目录存放资源

mkdir /data/cert

mkdir /data/www

退出docker容器,进入server界面

exit

查看所有容器信息,可以得到容器的id,如下图

docker ps -a

公牛定时插座 小米定时插座 哪个好_空调定时开和定时关_node定时任务

将资源文件传给服务端docker下的nginx容器

docker cp /data/cert 6ba3901beac9:/data/cert

储存容器

然后执行以下命令保存图像:

docker commit -m="备注" 你的CONTAINER_ID 你的IMAGE

请把-m后面的信息改成自己容器的信息

你完成了!

恭喜你完成了Docker教程,学习了Docker的一些基本操作

Centos下安装Jenkins

公牛定时插座 小米定时插座 哪个好_空调定时开和定时关_node定时任务

Jenkins是一个基于Java语言开发的持续构建工具平台,主要用于您的软件和项目的持续自动构建/测试。 它可以执行你预设的设置和构建脚本,也可以与Git代码库集成,实现构建的自动触发和定时触发。

这部分大部分内容是实现一套CI/CD流程【11】从0到1的掘金小册子,更详细的内容可以学习这本小册子

安装 OpenJDK

因为 Jenkins 是一个用 Java 编写的持续构建平台,所以安装 Java 是必不可少的。

这里,我们选择安装开源的openjdk。 这里我们可以直接使用yum包管理器安装openjdk。

yum install -y java

使用国内镜像加速Jenkins的安装

官方教程【12】安装速度太慢,所以我们选择国内镜像安装

以下是(2021/04)jenkins LTS版本:大家可以去清华大学镜像站[13]看看,替换成最新链接

下载 Jenkins 到 /data 目录

cd  /data

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.277.2-1.1.noarch.rpm

sudo yum install jenkins-2.277.2-1.1.noarch.rpm

启动詹金斯

Jenkins安装完成后,启动命令会注册到系统Service命令中。 所以我们可以直接使用系统服务命令启动Jenkins。

这里node定时任务,可以使用三个命令,分别对应start/restart/stop这三个命令。

这里,我们可以直接调用service jenkins start来启动Jenkins

service jenkins start
# service jenkins restart restart 重启 Jenkins
# service jenkins restart stop 停止 Jenkins

服务启动后,访问IP:8080。 如果能看到如下界面,说明正在启动。 Jenkins 的首次启动时间一般较长(取决于服务器性能)

公牛定时插座 小米定时插座 哪个好_node定时任务_空调定时开和定时关

初始化 Jenkins 配置以解锁 Jenkins

Jenkins启动完成后,会自动跳转到这个界面(下图二)。 这是Jenkins的解锁界面。 需要输入服务器保存的初始解锁密码,才能进行下一步操作。

Jenkins 启动后,会生成一个初始密码。 密码保存在服务器文件中,我们可以进入服务器查看密码内容,在Jenkins管理员密码输入框中填写密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

公牛定时插座 小米定时插座 哪个好_node定时任务_空调定时开和定时关

公牛定时插座 小米定时插座 哪个好_空调定时开和定时关_node定时任务

单击继续按钮以解锁 Jenkins。

下载插件

解锁后,会来到插件下载页面。 这一步需要下载Jenkins的一些功能插件。

node定时任务_空调定时开和定时关_公牛定时插座 小米定时插座 哪个好

因为jenkins插件服务器在国外,速度不是很理想。 安装插件前我们需要更换清华大学的Jenkins插件源,所以先不要点击Install Plug-in。

更换方法非常简单。 进入服务器,将/var/lib/jenkins/updates/default.json中的插件源地址替换成清华源地址,google替换成baidu。

sed -i 's/http://updates.jenkins-ci.org/download/https://mirrors.tuna.tsinghua.edu.cn/jenkins/g' /var/lib/jenkins/updates/default.json && sed -i 's/http://www.google.com/https://www.baidu.com/g' /var/lib/jenkins/updates/default.json

然后点击安装推荐的插件,稍等片刻插件安装完成

完成安装

插件安装完成后,下一步就是注册一个管理员账号。

node定时任务_公牛定时插座 小米定时插座 哪个好_空调定时开和定时关

按照提示一路配置,直到看到如下界面,即表示安装成功

公牛定时插座 小米定时插座 哪个好_node定时任务_空调定时开和定时关

测试安装

至此,我们的Jenkins就已经成功启动了。 然而,我们仍然需要在 Jenkins 上做一些简单的配置,然后它才能构建 docker 镜像。

我们点击Jenkins主页->左侧导航->新建任务->Freestyle项目(构建一个自由风格的软件项目)

公牛定时插座 小米定时插座 哪个好_node定时任务_空调定时开和定时关

新建完成后,找到构建项,选择添加构建步骤node定时任务,选择执行shell,输入以下命令

docker -v
docker pull node:latest

这个命令会拉取一个nodejs稳定版的镜像,我们可以测试Docker的可用性

公牛定时插座 小米定时插座 哪个好_空调定时开和定时关_node定时任务

保存后,我们点击左侧菜单中的Build Now,Jenkins就会开始构建。 选择左侧历史中的第一项(最新项),点击控制台输出,查看构建日志。

执行后发现没有访问权限。 什么情况?这里不得不提下Linux下的Unix Socket权限问题

在Linux中,Unix sockets属于root用户,所以需要root权限才能访问

但是在docker中,docker提供了一个用户组的概念。 我们可以将执行Shell的用户添加到名为docker的用户组中,就可以正常执行docker命令了。

而jenkins中执行的终端用户是jenkins,所以我们只需要将jenkins添加到docker用户组即可:

sudo groupadd docker          #新增docker用户组
sudo gpasswd -a jenkins docker  #将当前用户添加至docker用户组
newgrp docker                 #更新docker用户组

加入后重启Jenkins:

sudo service jenkins restart

重启 Jenkins 后,再次执行脚本。 此时执行成功:

回去看看docker镜像

docker images

你会发现多了一个docker的节点镜像,​​就是我们通过Jenkins自动安装的

空调定时开和定时关_node定时任务_公牛定时插座 小米定时插座 哪个好

输入这个 docker 镜像

docker run -it node /bin/bash

做一些配置(具体怎么做参考前面的说明)

npm config set registry https://registry.npm.taobao.org

npm get registry
# 可能提示已安装,就不用再安装了
npm install yarn -g

yarn config set registry http://registry.npm.taobao.org/

yarn config get registry

exit

使用 SSH 协议集成 Git 存储库源

这一步我们使用Jenkins集成外部Git仓库来拉取和构建真正的代码。 在这里,我们选择 Gitee(Github 太慢了)作为我们的代码源。 这里准备了一个UmiJS[14]工程来演示构建。

生成公钥和私钥

首先,让我们配置公钥和私钥。 这是 Jenkins 访问 Git 私有库的常用认证方式。 我们可以使用 ssh-keygen 命令生成公钥和私钥。 在本地机器上执行构建。 这里的邮箱可以换成你自己的邮箱:

ssh-keygen -t rsa -C "642178633@qq.com"

执行后会遇到第一步:输入保存密钥的文件。

这一步是询问你要把公钥文件和私钥文件放在哪里。 默认放在~/.ssh/id_rsa下,当然你也可以选择输入自己的路径。 一路回到车上。

完成后,你会得到两个文件。 id_rsa 和 id_rsa.pub 分别。

其中,id_rsa为私钥文件,id_rsa.pub为对应的公钥文件。

我们需要在Git端配置公钥,在Jenkins端使用私钥与Git进行身份验证。

在 Gitee 中配置公钥

在Gitee中,如果要配置公钥,有两种方式:仓库公钥和个人公钥。 其中,如果配置了仓库公钥,该公钥只能访问配置的仓库。 如果配置了个人公钥,则可以访问该账号下的所有私有仓库。

这里我们以配置个人公钥为例。首先打开右上角的设置,点击下面的设置=> SSH公钥

node定时任务_公牛定时插座 小米定时插座 哪个好_空调定时开和定时关

node定时任务_公牛定时插座 小米定时插座 哪个好_空调定时开和定时关

下面有个添加公钥,填写信息即可。

title是公钥的标题,这里可以自定义; 公钥是刚刚生成的 id_rsa.pub 文件。 使用cat命令查看文件内容,在输入框中填写内容并保存。然后到Jenkins端配置私钥

cat ~/.ssh/id_rsa.pub

在 Jenkins 中配置私钥

回到詹金斯。 在Jenkins中,私钥/密码等认证信息以证书的形式进行管理,因此可以全局使用。 我们可以在配置任务时添加自己的凭据。 点击项目的配置,然后找到源代码管理=> Git => Repositories

空调定时开和定时关_公牛定时插座 小米定时插座 哪个好_node定时任务

这里的Repository URL是我们的仓库地址,SSH地址格式是git@gitee.com:xxx/xxx.git。从仓库首页的clone/download => SSH可以看出

重点在 Credentials 项上,这里是我们选择身份验证凭据的地方。 我们可以点击右侧的Add => Jenkins 按钮来添加新的凭证认证信息。

点击之后会弹出一个弹窗,就是Jenkins添加凭证的弹窗。 在Type中选择SSH Username with private key项。 然后填写信息:

在命令行窗口,查看私钥文件内容,复制

cat ~/.ssh/id_rsa

点击添加按钮复制xxx私钥文件中的所有文件内容(包括开头的BEGIN OPENSSH PRIVATE KEY和结尾的END OPENSSH PRIVATE KEY)

然后单击添加按钮以保存凭据。

保存后,在 Credentials 下拉列表中选择您添加的凭据。

如果没有出现红色的无权限提示,则表示身份验证成功,可以正常访问。

如果出现如下问题,说明服务器没有安装Git

安装完成后,刷新界面就正常了

yum -y install git

建立形象

环境准备好后,我们就可以开始构建镜像了。 但是,在构建镜像之前,我们需要准备一个 DockerFile。 那么什么是 DockerFile?

编写 Dockerfile

什么是 Dockerfile

Dockerfile是Docker镜像的基本描述文件,描述了生成镜像所需的执行步骤。 我们也可以自定义一个 Dockerfile 来创建我们自己的镜像。

例如,以下步骤可以使用 Dockerfile 描述为:

基于nginx:1.15镜像为基础。

将本地html文件夹中的文件复制到镜像中的/etc/nginx/html文件夹中。

将本地conf文件夹中的文件复制到镜像中的/etc/nginx/文件夹中。

FROM nginx:1.15-alpine
COPY html /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html

写入后,如何生成镜像? 我们只需要使用 docker build 命令构建镜像即可:

docker build -t imagename:version .

-t:声明要打印一个镜像的Tag标签,后面跟着标签。

标签的格式为image name:version.:声明搜索dockerfile的路径..表示在当前路径下搜索。 默认文件名为 Dockerfile。

有关 DockerFile 语法的更多详细信息,您可以参见此处[15]

因为我们的镜像只包含一个nginx,所以dockerfile的内容比较简单。 我们只需要在代码的根目录新建一个名为Dockerfile的文件,输入以下内容,提交到代码仓库[16]。

vi Dockerfile
FROM nginx:1.15-alpine
COPY html /etc/nginx/html
COPY conf /etc/nginx/
WORKDIR /etc/nginx/html

git add ./Dockerfile
git commit -m "chore: add dockerfile"
git push

詹金斯端配置

代码源和DockerFile准备好后,在服务器的/data目录下新建jenkins-shll.sh脚本文件

touch /data/jenkins-shll.sh

vi /data/jenkins-shll.sh

并添加以下内容

#!/bin/sh -l

yarn
yarn run build
docker build -t jenkins-test .

这里的脚本很简单,主要功能就是安装依赖=>构建文件=>构建镜像。

#!/bin/sh -l 的作用是:

如果服务器中的shell命令可以执行,但是在jenkins中执行不了,那是因为jenkins没有加载服务器中的全局变量/etc/profile。

最后只需要配置在Jenkins端执行的Shell脚本即可。 找到项目的配置,然后找到build => Execute shell。 输入以下脚本:

sh /data/jenkins-shll.sh

手动执行任务

保存后,我们手动触发下一个任务的执行。当没有报错时,任务执行成功

回去看看docker

docker images

可以发现还有一个名为jenkins-test的docker镜像

公牛定时插座 小米定时插座 哪个好_空调定时开和定时关_node定时任务

自动化任务安装插件

安装Generic Webhook Trigger Plugin(系统管理-插件管理-可用插件-搜索Generic Webhook)

选择并单击不重启安装

空调定时开和定时关_node定时任务_公牛定时插座 小米定时插座 哪个好

如果可选插件列表为空,请单击高级选项卡,将升级站点的 URL 替换为:,然后单击提交并立即获取。

添加触发器

Generic Webhook Trigger Plugin插件非常强大,可以根据不同的触发参数触发不同的构建操作。 比如我把master分支的代码提交到远程仓库,就会进行代码部署。 我提交到远程仓库的是feature分支,执行单元测试,单元测试通过后合并到dev分支。

灵活性非常高,您可以定制和配置适合您公司的解决方案。 这里方便演示,我们不做任何条件判断,只要有推送就会触发。

在Task Configuration -> Trigger Build -> 勾选Generic Webhook Trigger并保存

公牛定时插座 小米定时插座 哪个好_node定时任务_空调定时开和定时关

Git 仓库配置钩子

这里以码云为例。 github的配置基本一样。 进入码云项目首页后,点击管理-webhooks-添加,会弹出这样的框。

公牛定时插座 小米定时插座 哪个好_空调定时开和定时关_node定时任务

上图中URL的格式为:@:port/generic-webhook-trigger/invoke

以下选项是当你在仓库中执行一些操作时触发钩子。 这里默认使用push。

进入jenkin的系统管理->管理用户界面,可以看到一个用户列表。 在此列表中查找用户 ID。

空调定时开和定时关_node定时任务_公牛定时插座 小米定时插座 哪个好

接下来点击工具图标进入详情界面,找到API Token->Add New Token->Generate->找一个你喜欢的地方,保存这个token

Jenkins IP地址和端口是你部署的jenkins服务器的ip地址,如果端口号没改就是8080。

密码是你登录jenkins的密码

点击提交完成配置,我们还需要测试一下钩子是否生效

node定时任务_公牛定时插座 小米定时插座 哪个好_空调定时开和定时关

点击测试,如果配置成功,在Jenkins的左栏你的构建执行状态会出现一个任务。

空调定时开和定时关_公牛定时插座 小米定时插座 哪个好_node定时任务

实现邮件提醒-todo批量删除构建历史

转到系统配置 – >脚本命令运行

公牛定时插座 小米定时插座 哪个好_空调定时开和定时关_node定时任务

输入脚本

"test"是项目名称,100是指(0100)全删除,就是构建历史前面的ID
def jobName = "test"

def maxNumber = 100

Jenkins.instance.getItemByFullName(jobName).builds.findAll {it.number <= maxNumber}.each { it.delete() }

点击运行

终于

您在日常工作中还使用了哪些其他 Centos 配置? 欢迎在评论区留下你的看法!

觉得收获满满的朋友欢迎点赞关注一波!

参考

[1]

从原理到实战,吃透Nginx! :

[2]

NVM官网:#install–update-script

[3]

Node.js官网:

[4]

显示本地镜像列表:

[5]

删除一个或多个本地镜像:

[6]

容器的启动/关闭/重启:

[7]

删除一个或多个容器:

[8]

阿里云容器镜像服务:

[9]

Nginx 容器教程:

[10]

Debian镜像使用帮助:

[11]

实现一个从0到1的CI/CD流程:

[12]

官方教程:+Jenkins+on+Red+Hat+distributions#space-menu-link-content

[13]

清华镜像站:

[14]

乌米:

[15]

这里:

[16]

代码库: