Jenkins + Docker automated deployment .Net Core

1. Install JenKins

Docker used here to install JenKins, of course, can be installed directly into Linux.

Create a working directory jenkins

mkdir /usr/local/jenkins

Mirrored pull jenkins

docker pull jenkins

There is a small episode, I use jenkins mirror, the default is the latest version generally means the last date. Many are also the latest official image so named; It was not until later installation configuration is complete, log into the tips I am not the latest version, so I updated, and many plug-ins no longer supported in this version. Find the current version and the latest version is also a difference of several. I thought this is not an official mirror how it was so old version, finally found by searching, Jenkins has now been changed to the latest official mirrored jenkins / jenkins of the.

So the latest version is: Jenkins / Jenkins

 

We pull lts latest version.

docker pull jenkins/jenkins:lts

See figure below jenkins and jenkins / jenkins difference between the two mirrors found in the latest version of the routine is not up to date, their creation time is already a year ago. And jenkins / jenkins create time in less than two days.

So conventional latest does not mean that the latest version.

Modify jenkins directory and directory permissions docker, where 1000 is the container Jenkins users uid

chown -R 1000:1000 /usr/local/Jenkins

sudo chown -R 1000:1000 /var/run/docker.sock

In particular, docker.sock this authority is very important to the container when the docker Jenkins needs to perform the required command

Note that running Jenkins mirror behind the name and version lts

docker run -itd -p 8080:8080 -p 50000:50000 --name jenkins --privileged=true  -v /usr/local/jenkins:/var/jenkins_home -v /usr/bin/docker:/bin/docker  -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts 

Parameters explanation:

-p 8080: 8080 -p 50000: 50000 - mapping jenkins port

--name jenkins - container name their own name

privileged = true - to grant administrator privileges container

-v / usr / local / jenkins: / var / jenkins_home - mapping jenkins directory

-v / usr / bin / docker: / bin / docker - mapping docke directory when needed to execute a command in containers docker

-v /var/run/docker.sock:/var/run/docker.sock - mapping docker execute the command to execute when needed container docker command.

 

Whether to start a successful container best through docker ps or netstat -ntlp | grep 8080 (see our container port mapping monitor whether success) to view the current container is running successfully.

In some cases, such as permission not paired, will start unsuccessful.

View container are running.

docker ps

 

2. Configure JenKins

After a review of container successful start, we can address + Jenkins port access just run

For example http://192.168.1.101:8080   

After a successful installation will access as shown below.

提示首次访问需要密码,我们通过刚刚映射的Jenkins目录里查看这个默认密码。

默认密码路径:/usr/local/jenkins/secrets/  (注意前面usr/local/jenkins路径就是刚刚自己映射的目录)

查看密码文件

cat initialAdminPassword

输入密码然后继续下一步。

下一步如果有出现404的,如下图

网上搜索了解听说是Jenkins的一个bug;部分版本存在。

 

 

 

解决办法(以下步骤是解决登录404的;如果没有404则可以跳过)

首先回到Jenkins主目录找到config.xml文件并打开。

将<useSecurity> 修改为false

 

停止并重新运行jenkins

重启后一定要重新查看默认密码,否则旧密码是登录不成功的。

登录进去以后这里默认选择推荐的插件。

接下来就是等待安装,这里需要注意,如果jenkins版本比较老,则可能很多插件安装失败,直接红色的。此时可以跳过该界面进入首页。会有提示让你升级最新Jenkins版本。

安装完成后创建一个用户名和密码,即可完成安装进入首页。

 

3. 创建项目

1、源代码编译发布工程

源代码发布工程即将源代码提交到git服务器,jenkins通过git拉取最新的源代码,并通过Dockerfile里的配置进行编译发布过程。然后通过Docker构建此镜像并运行到容器。

创建一个.Net Core Web项目。

创建项目的时候可以选择启用Docker支持。

对于之前的项目可以右键添加Docker支持。

项目目录

默认的Dockerfile是有帮我们进行代码编译并发布动作的。所以默认的Dockerfile文件是适合和代码一起提交到服务器然后使用Docker进行构建镜像。

 

项目创建完成后随代码一起提交到git服务器。(svn等也都可以)

git项目目录,注意将Dockerfile复制到根目录。由于到时候构建镜像的时候就是从根目录执行的。git目录如下所示。

 

2、已编译的Release工程

已编译的Release工程,此种方式适合git或svn在局域网的;又不希望源代码不暴露到外网的需要。此种方式是将项目工程进行进行发布打包操作。例如java常见的打包成一个war包文件。.Net 就是生成对应的DLL 文件。

项目在发布之前我们对项目的Dockerfile文件属性做个更改,以便在发布时将此文件复制到发布时的目录。

选择上面建立的WebTest项目右键发布,选择发布到指定文件夹。

将发布文件发布到自己的git(或svn)目录,如下图所示的,一定要包含Dockerfile文件。发布后的文件,可以根据自己需要将没有更新DLL或者appsetting.json等文件剔除掉。只保留本次要更新的文件即可。

修改Dockerfile文件,因为默认的Dockerfile文件是包含编译发布的命令,所以这里要将这些相关命令操作删除掉;保留如下命令配置即可。

保存然后提交到所有文件到git服务器。

提交后的git目录。

建议:无论是代码编译发布工程还是已编译的Release工程,第一次使用Docker部署时最好先自己手动将这些文件拷贝到服务器,并手动构建对象并运行容器看是否成功;能否访问网站。也就是先不用Jenkins将这些流程自己手动走一遍,确保一些目录包括Dockerfile等都是配置正确的。

4.  创建JenKins任务

项目工程创建完成并提交到git服务器后,开始在Jenkins里面创建任务。

输入项目描述,源代码管理选择自己对应的即可。

 

我这里选择的git。第一次添加项目时需要添加一种授权方式点击右边添加按钮即可。

选择添加授权方式 常用的就是用户名加密码或者SSH方式。

 

下一步设置构建环境

设置触发器,这里主要是设置自动触发条件,有定时构建、远程触发构建、轮询SCM。

这里只设置轮询SCM形式的,很简单的方式。意思是在指定间隔时间内会去轮询git或svn中版本是否有变化。如果有就立即构建该项目。其实就是做到只要代码提交了 则立刻就能自动构建项目进行发布;不在需要其他任何操作了。

选择构建—>执行shell;当然我们这里是linux服务器所有多数选择执行shell。

添加shell 命令。

 

注意下面的webtest 改为自己的容器名称和对应镜像名称即可。

复制代码
#!/bin/bash
# 获取短版本号
GITHASH=`git rev-parse --short HEAD`
docker stop webtest
docker rm webtest
echo ---------------Building Docker Image...------------------
docker build -t webtest:$GITHASH .
docker tag webtest:$GITHASH webtest:latest
echo ---------------Launching Container...------------------
docker run --name webtest -d -p 8005:80 webtest:latest 
复制代码

使用git提交代码进行测试。

自动开始构建了 注意jenkins这里时间是默认是utc时间。utc时间转换我们北京时间是要+8小时的。

 

蓝色图标代表构建成功,如果失败会是红色

 

查看控制台输出信息,尤其构建失败时能够从里面获取到失败原因等。

控制输出如下图所示

构建成功后我们到服务器检查下是否有刚刚构建的镜像和运行的容器。(当然一般情况下只要构建成功这两步可以不用检查)

查看镜像

查看运行的容器

访问站点看能否访问成功。

Guess you like

Origin www.linuxidc.com/Linux/2019-12/161822.htm