本文档以构建一个 Java 软件项目并部署到阿里云容器服务的 Kubernetes 集群为例,为您介绍如何使用 Bamboo在阿里云Kubernetes服务上运行Remote
Agents并在agents上运行Build Plans。

前提条件

  • 您已经成功创建一个 Kubernetes 集群,参见创建Kubernetes集群。
  • 您已经创建好一个Bomboo Server。

源码项目

本示例中创建的GitHub源码项目地址为如下:

https://github.com/AliyunContainerService/jenkins-demo.git

分支为bamboo

在Kubernetes中部署Remote Agent

  1. 创建kaniko-docker-cfg secret。

    在Remote Agent上构建任务并且使用kaniko推送容器镜像时,kaniko-docker-cfg secret用于的配置镜像仓库访问权限。

    1. 在Linux服务器上使用root用户执行如下命令,生成/root/.docker/config.json
      docker login registry.cn-hangzhou.aliyuncs.com
    2. 通过CloudShell 连接 Kubernetes 集群,并执行如下命令,创建kaniko-docker-cfg secret。
      kubectl -n bamboo create secret generic kaniko-docker-cfg  --from-file=/root/.docker/config.json
  2. 创建Bamboo Agent 应用。
    创建serviceaccount bamboo以及clusterrolebinding,用于kubectl部署应用到kubernetes集群的权限设置。

    1. 创建并拷贝以下内容到bamboo-agent.yaml,并执行kubectl -n bamboo apply -f bamboo-agent.yaml命令,创建Bamboo Agent 应用。
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        namespace: bamboo
        name: bamboo
      
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: bamboo-cluster-admin
      subjects:
        - kind: ServiceAccount
          name: bamboo
          namespace: bamboo
      roleRef:
        kind: ClusterRole
        name: cluster-admin
        apiGroup: rbac.authorization.k8s.io
      
      ---
      apiVersion: apps/v1beta2
      kind: Deployment
      metadata:
        name: bamboo-agent
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: bamboo-agent
        template:
          metadata:
            labels:
              app: bamboo-agent
          spec:
            serviceAccountName: bamboo
            containers:
            - name: bamboo-agent
              env:
              - name: BAMBOO_SERVER_URL
                value: http://xx.xx.xx.xx:8085
              image: registry.cn-hangzhou.aliyuncs.com/haoshuwei/docker-bamboo-agent:v1
              imagePullPolicy: Always
              volumeMounts:
                - mountPath: /root/.docker/
                  name: kaniko-docker-cfg
            volumes:
              - name: kaniko-docker-cfg
                secret:
                  secretName: kaniko-docker-cfg
    2. 完成后,执行如下命令查看日志。
      kubectl -n bamboo logs -f <bamboo agent pod name>
      说明 示例中bamboo agent pod name需要替换成实际的文件名。

    3. Remote Agent注册成功后,登录Bamboo。单击右上角%title插图%num,在下拉框中选择Agent,在Bamboo administration页面,可以看到部署好的Agent。
      %title插图%num

配置一个Build plan

完成应用源码拉取、编译打包、容器镜像打包和推送、应用部署的过程。

  1. 创建一个Build plan。
    1. 登录Bamboo,选择Create > Create plan,进入Configure plan页面。
    2. Project选择bamboo-ack-demo,填写Plan namePlan keyPlan descriptionRepository host选择java-demo,完成后单击Configure plan
      %title插图%num
  2. 进入Configure Job页面,配置Stages并添加Job。
    1. 源码拉取

      在创建Bulid plan时,参数Repository host选择java-demo,即已完成源码拉取,您可以通过如下操作,修改源码拉取位置。

      1. Create tasks区域,单击Source Code Checkout
        %title插图%num
      2. 在右侧的Source Code Checkout configuration页面,修改参数Repository host的取值,单击Save
    2. mvn打包
      1. Create tasks区域,单击Add task,在弹出的Task types页面选择Command
        %title插图%num
      2. 在右侧弹出Command configuration页面,填写Task descriptionExecutableArgument后,单击Save
        %title插图%num
    3. kaniko打包和推送容器镜像
      1. Create tasks区域,单击Add task,在弹出的Task types页面选择Script
        %title插图%num
      2. 在右侧弹出Script configuration页面,填写Task descriptionScript location后(其他参数保持默认值即可),单击Save
        %title插图%num
        本示例中,Script location如下:

        kaniko -f `pwd`/Dockerfile -c `pwd` --destination=registry.cn-hangzhou.aliyuncs.com/haoshuwei/bamboo-java-demo:latest

    4. Kubectl 部署应用到 Kubernetes
      1. Create tasks区域,单击Add task,在弹出的Task types页面选择Script
        %title插图%num
      2. 在右侧弹出Script configuration页面,填写Task descriptionScript location后(其他参数保持默认值即可),单击Save
        %title插图%num
        本示例中,Script location如下:

        sed -i 's#IMAGE_URL#registry.cn-hangzhou.aliyuncs.com/haoshuwei/bamboo-java-demo:latest#' ./*.yaml
        kubectl apply -f ./

  3. 运行 Build。
    1. 上述配置完成后,单击Create,进入bamboo-ack-demo页面。
      %title插图%num
    2. 在右上角选择Run > Run plan,运行Build。
      %title插图%num
      您可以通过单击Logs页签,可以运行日志。
      %title插图%num
  4. 访问应用服务。
    1. 执行kubectl -n bamboo get svc命令,查看应用服务。
      [root@iZbp12i73koztp1cz75skaZ bamboo]# kubectl -n bamboo get svc
      NAME                TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)        AGE
      jenkins-java-demo   LoadBalancer   xx.xx.xx.xx     xx.xx.xx.xx       80:32668/TCP   39m
    2. 在浏览器中使用http://EXTERNAL-IP,访问应用。
      %title插图%num

相关参考

单击这里查看本示例中镜像registry.cn-hangzhou.aliyuncs.com/haoshuwei/docker-bamboo-agent:v1的制作。

了解更多Bamboo的相关内容,请参见Bamboo。