CICD篇3-jenkins配置和使用

  • Post author:
  • Post category:其他



CICD篇1-Win10安装Git和SourceTree并使用云服务拖管代码



CICD篇2-centos7.6中docker安装jenkins



一、准备好项目代码



在前面CICD篇1和篇2中,我已新建了项目并把项目拖管到了云上(码云或腾讯工蜂或阿里云效),并且添加了docker支持,也准备了一台云服务器安装了jenkins。

在这里插入图片描述

在这里插入图片描述

打开Dockerfile,看到基础镜像名字,先登录云服务器下载好此镜像,这样到时候制作镜像时就不要再临时下了,会快些。


docker pull mcr.microsoft.com/dotnet/aspnet:5.0

这个用来制作asp.net core镜像


docker pull mcr.microsoft.com/dotnet/sdk:5.0

这个用来给代码进行包还原和编译项目

这是我的项目完整路径以供参考

在这里插入图片描述

在这里插入图片描述

dockerfile我进行了修改,路径是坑,容易出错

这是原先自动生成的dockerfile代码

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["myapi1/myapi1.csproj", "myapi1/"]
RUN dotnet restore "myapi1/myapi1.csproj"
COPY . .
WORKDIR "/src/myapi1"
RUN dotnet build "myapi1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myapi1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myapi1.dll"]

这是我修改后的dockefile代码

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src

COPY ["./myapi1.csproj", "/src/myapi1/"]
RUN dotnet restore "myapi1/myapi1.csproj"
COPY ./* /src/myapi1/
WORKDIR "/src/myapi1"
RUN dotnet build "myapi1.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "myapi1.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "myapi1.dll"]



二、安装配置好jenkins的docker插件





系统管理

—–>

插件管理

中下的可选插件搜索

docker

,勾选并直接安装

在这里插入图片描述

配置docker的监听端口

用Jenkins构建docker的操作,需要用Jenkins调用docker命令。默认情况下,Docker守护进程会生成一个socket(/var/run/docker.sock)文件来进行本地进程通信,但不会监听任何端口。

输入

vi /usr/lib/systemd/system/docker.service

编辑这个文件,输入

i

进入编辑状态



ExecStart

这句替换为

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock




esc

退出编辑状态,输入

:wq

保存。

重新加载docker配置

systemctl daemon-reload


重启docker服务

systemctl restart docker


重启jenkins服务

docker restart myjenkins

如果设置了

--restart=alwalys

就不需要重启jenkins

我这里jenkins和镜制作在同一台服务器,也要开放端口(如果不在一台服务器,云安全组要开放2376端口)

开放CentOS7.6的2376端口


firewall-cmd --zone=public --add-port=2376/tcp --permanent


重启防火墙


firewall-cmd --reload

在系统管理–>系统配置里面找到cloud

在这里插入图片描述

然后添加一个docker

在这里插入图片描述

再配置好地址,IP是我jenkins云服务器内网IP地址,点test后成功得到docker版本号,然后记得点保存save

在这里插入图片描述

还有一个方式测式在jenkins容器内是否可访问宿主机的docker

先用

ifconfig

得知云服务器内网IP为10.216.0.9

首先进入容器(myjenkins为当前jenkins的容器名)


docker exec -it myjenkins /bin/bash


浏览宿主机的docker里有哪些镜像


curl http://10.216.0.9:2376/images/json


查看到镜像信息后表示访问docker成功了,输入

exit

退出容器。



三、配置好用户名和密码来登录码云或腾讯工蜂或阿里云效这些云服务拉取代码



之前在腾讯工蜂里的账户–>GIt帐户中我已设置好了用户名和密码。

代码将会拉到宿主机

/root/jenkinsdata/workspace/myjob1

目录,因为之前

docker run

后的参数设置了

/root/jenkinsdata


在这里插入图片描述

新建一个

自由风格的任务

,名称为

myjob1


在这里插入图片描述

源码管理设置远程Git的地址(这里URL应填https开头的,我的图片里的URL不对哦)

在这里插入图片描述

点击添加,选择类型为

Username with password

,输入腾讯工蜂的git用户名和密码并保存

在这里插入图片描述

设置好后就OK了,jenkins到时就可以拉取腾讯工蜂源代码(码云和阿里类似),如下图(这里URL应填https开头的,我的图片里的URL不对哦)

在这里插入图片描述



四、配置jenkins的webhook回调url和token给腾讯工蜂以供其调用(码云和阿里云效也类似)



构建触发器前,安装插件

Gitlab Hook Plugin

,这里我只选了

push

事件才会触发jenkins构建

在这里插入图片描述

这个

http://xxxxx:8080/project/myjob1

复制粘贴到

云服务器上的回调钩子页面


点击生成回调钩子的

token

,如下图

在这里插入图片描述



url和token

填入腾讯工蜂服务器上的设置–>高级设置—>网络回调钩子中(码云和阿里云效也类似)。这样,将来有代码提交到服腾讯工蜂时,腾讯工蜂就会通知我的那台jenkins服务器,jenkins服务器收到通知后就拉取代码并执行镜像构建。

在这里插入图片描述

勾选

Delete Workspace before build starts

表示构建开始前先清除删除jenkins数据目录下本项目上次的构建。

勾选

Abort the bulid if it’s stuck



absolute 8

表示当构建卡死超过绝对时间8分钟时终止构建

构选

Add timestamps to the Console Output

表示添加时间戳到输入控制台。

在这里插入图片描述



五、配置jenkins推送镜像到远程腾讯云个人版镜像仓库



在我的腾讯云,镜像仓库,个人版里,新建一个命名空间,然后设置好密码等等,之后jenkins制作的镜像就推到这里面来。(也可以查看腾讯云如何推送镜像的文档)

在这里插入图片描述

在宿主机(而不是容器内)输入


vi /root/jenkinsdata/tenxunyun_images_repository_password.txt

创建文件,输入

i

进入编辑状态,

输入腾讯云个人版镜像仓库的登录密码XXXXX后按

esc

退出编辑状态,输入

:wq

保存。输入

exit;

退出容器。

先测试一下登录我的镜象仓库


cat /root/jenkinsdata/tenxunyun_images_repository_password.txt | docker login --username=XXXXXXX --password-stdin http://ccr.ccs.tencentyun.com

来登录腾讯云个人版镜象仓库。

看到

Login succeeded

表示登录成功。



六、编写构建脚本



选点击增加构建步骤,再选择执行shell

在这里插入图片描述

编写如下脚本:(注意cd 和cat命令的路径是坑,容易出错,我先是用的宿主机路径错了)

#!/bin/bash

#自定义镜像的名称
image_name=myapi1

echo '======进入dockerfile所在目录======'
cd /var/jenkins_home/workspace/myjob1/src/myapi1

echo '======构建镜像======'
docker build -t $image_name:0.1 .

#获取镜像id到变量imageid中
imageid=$(docker images | grep "$image_name" | awk '{print $3}')
echo '======镜像id是' $imageid '======' 

echo '======登录腾讯云个人镜像仓库======'
cat /var/jenkins_home/tenxunyun_images_repository_password.txt | docker login --username=XXXXXX --password-stdin http://ccr.ccs.tencentyun.com

echo '======推送前得按他们的格式重新命名======'
docker tag $imageid ccr.ccs.tencentyun.com/zhizhe/$image_name:0.1

echo '======推送镜像到腾讯云个人版的镜像仓库======'
docker push ccr.ccs.tencentyun.com/zhizhe/$image_name:0.1

echo '======删除本地构建过程中产生的中间镜像======'
docker rmi $(docker images -f "dangling=true" -q)

echo '======删除本地刚构建的镜像======'
docker rmi -f $imageid
echo '======成功======'

保存。

开始构建

前面第一节,我准备了一个项目,然后又新增了一个dockfile文件,现在我来把这个push到腾讯工蜂git服务器上去。push完成后马上到jenkins中查看job的控制台输出

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

最后大功告成

然后登录我的腾讯云个人版镜像仓库,可看到镜像来了。

在这里插入图片描述



版权声明:本文为junshangshui原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。