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的控制台输出
最后大功告成
然后登录我的腾讯云个人版镜像仓库,可看到镜像来了。