Skip to content

Jenkins + Gitee 项目持续集成和持续交付 - 第一篇

本系列Jenkins使用Docker部署,Gitee项目需要编写Dockerfile以构建Docker镜像。构建出来的Docker镜像将被Jenkins自动推送至阿里云容器镜像服务中,其实就是阿里云提供的“Docker Hub”。

本系列依次做到:

  1. 手动调用Jenkins去构建项目镜像并推送至镜像仓库中。本文内容!
  2. 当Gitee仓库被push操作时,Jenkins会自动构建项目镜像并推送至镜像仓库中。Jenkins + Gitee 项目持续集成和持续交付 - 第二篇
  3. Jenkins构建项目镜像并推送至镜像仓库之后,可以自动更新已经在服务器上运行的服务实例。待完成

其中,1的实现可以在自己电脑上安装Jenkins,2和3需要将Jenkins安装至拥有公网IP的服务器中才可以做到。

准备Jenkins

安装Jenkins

需要提前安装Docker和docker-compose。

docker-compose.yaml文件:

yaml
version: '3.5'
services:
  jenkins:
    image: jenkinsci/blueocean
    container_name: jenkins
    restart: always
    user: root
    ports:
      - "8081:8080"
      - "50000:50000"
    volumes:
      - jenkins-data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock

volumes:
  jenkins-data:

docker-compose.yaml目录下执行docker-compose up -d启动Jenkins,首次启动会拉取镜像。

如下输出代表启动成功:

bash
[+] Running 3/3
 Network docker_default        Created                                                                0.1s
 Volume "docker_jenkins-data"  Created                                                                0.0s
 Container jenkins             Started                                                                3.5s

首次启动Jenkins

根据ip+8081端口打开Jenkins:

image-20230707100325619

docker-compose.yaml目录下执行docker-compose logs可以看到解锁 Jenkins所需要的密码:

c++
jenkins  | Jenkins initial setup is required. An admin user has been created and a password generated.
jenkins  | Please use the following password to proceed to installation:
jenkins  | 
jenkins  | 320ac6e4057bd7a881f30d63456596ab
jenkins  | 
jenkins  | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

输入密码后继续:

image-20230707100657460

选择“安装推荐的插件”即可。

image-20230707145131667

上图3个插件安装失败,不必理会,直接继续。

创建一个账户:

image-20230707145213558

实例配置这里直接保存即可:

image-20230707145245422

重启Jenkins后刷新页面,使用刚才创建的账户登录即可:

image-20230707145406988

升级Jenkins

登陆之后,进入“系统管理”,升级Jenkins。这里报的错不用管,稍后更新完插件就都解决了。

image-20230707145521171

勾选“安装完成后重启Jenkins(空闲时)”

image-20230707145650553

更新插件

进入“系统管理”->“插件管理”:

image-20230707150535909

把插件全选后,点击“下载待重启后安装”。

image-20230707150720389

在最下面勾选“安装完成后重启Jenkins(空闲时)”

更新完之后,系统管理就不会再报错了。

安装插件

Gitee插件

搜索插件Gitee:

image-20230707231742816

勾选并安装:

image-20230707231810991

Docker Pipeline插件

搜索插件Docker Pipeline:

image-20230707234139181

勾选并安装:

image-20230707234154792

Jenkins配置凭证

Gitee私人令牌

在Gitee生成私人令牌:

image-20230707232634296

在“系统管理”->"Credentials"中添加刚生成的Gitee私人令牌。

image-20230707154127662

进入“Credentials”后,点击“Stores scoped to Jenkins”->"System"->"全局凭据 (unrestricted)",右上角“Add Credentials”。

image-20230707232740571

直接Create即可。

然后进入“系统管理”->“系统配置”,填写Gitee配置:

image-20230707233042467

保存即可。

阿里云容器镜像服务凭证

首先要先配置固定密码:

image-20230707173423544

配置密码之后,在Jenkins中Add Credentials即可:

image-20230707173740918

Gitee凭证

添加Gitee登陆用户名和密码:

image-20230707233513439

直接Create即可。

准备Gitee仓库

这里我用的是自己之前写的一个项目,项目根目录下要有Dockerfile文件:

image-20230707172839866

项目根目录下也要有Jenkinsfile文件:

ASN.1
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    def gitHash = sh(script: 'git rev-parse --short HEAD', returnStdout: true).trim()
                    docker.withRegistry('https://registry.cn-hangzhou.aliyuncs.com', '2') {
                        def dockerImage = docker.build("fu-xdu/nft-server:${gitHash}")
                        dockerImage.push("${gitHash}")
                        dockerImage.push("latest")
                    }
                }
            }
        }
    }
}

注意:上面Jenkinsfile文件中的 docker.withRegistry('https://registry.cn-hangzhou.aliyuncs.com', '2')2是我们配置的阿里云容器镜像服务凭证的ID!

准备阿里云镜像仓库

image-20230707231612244

Jenkins创建任务

在Dashboard新建任务:

image-20230707173847244

写入名称,选择“流水线”:

image-20230707173911733

选择Gitee链接:

image-20230707233200195

将“流水线”->“定义”改为“Pipeline script from SCM”,并填写仓库信息:

image-20230707233646804

保存即可。

手动操作Jenkins构建项目

在NFT-Server页,点击立即构建:

image-20230707234408805

点击左“#1”可以查看构建时的Console Output,构建完成后的输出如下所示:

image-20230707235203284

前往阿里云容器镜像仓库,可以看到镜像已经存在:

image-20230707234906378