CloudIBM Cloud

IBM CodeEngine Devops构建

本教程使用IBM Cloud相关的产品进行APP的容器化部署,其中涉及到的IBM Cloud产品服务包括:

  • Container Register:用于储存构建的镜像
  • Code Engine:Code Engine拉取Container Register保存的镜像,构建并运行容器
  • IBM Devops:在这个服务中新建ToolChain,进行自动化构建交付。
  • IBM GitHub:IBM企业git存储仓库,可以选择其他可用的代码存储仓库

IAM API Key生成


  • 打开IBM Cloud的网站
  • 在网站顶部的选项中,选择管理->访问权
  • 在访问权页面左侧,选择API密钥->点击创建IBM Cloud API密钥
  • 在弹出的创建密钥窗口中输入名称(描述可选填),点击创建
  • 接下来会出现成功创建API密钥的弹窗, 这里一定要注意下提示文字,最好将生成的密钥保存在其他安全的地方,因为关闭当前弹窗,就再也无法看到此密钥了

Container Register名称空间新建


  • 点击IBM Cloud网站左上角的导航菜单按钮
  • 在弹出的侧边栏列表选择Container Register
  • 在Container Register页面点击侧边栏的名称空间,选择位置后,点击创建按钮

CodeEngine项目及访问注册权新建


  • 新建项目, 在IBM导航菜单中选择CodeEngine,在CodeEngine页面,点击左侧项目选项
  • 点击画面中的创建按钮,创建新项目,输入名称后创建保存
这样,在项目列表就出现了刚刚创建的项目
  • 创建注册访问权, 为了使CodeEngine的项目可以访问到Container Register上的镜像,需要进一步为项目设置注册访问权
点击列表中的项目名称,打开项目设定页面,侧边栏选择注册表访问权,点击创建,右侧弹出侧边栏, 在侧边栏输入唯一的注册表名称,注册服务器,密码
提示				
注册服务器:和使用的Container Register名称空间的位置关联的,仔细看一下文字提示				
	在前一个sheet“ContainerRegister名称空间新建”,我创建了位于东京的项目,所以这里填写的是jp.icr.io			
			
密码:这里的密码不是让用户自定义,填写的是IAM API Key(前面提醒大家保存的API Key)				
注册表名称:后续CodeEngine发布容器时需要使用的				

IBM Devops工具链创建


提醒:这里我们要使用IBM Devops的工具链来构建镜像,发布容器。请确保:你有ToolChain的编辑以上的权限

  • 从IBM导航菜单点击Devops
  • 选择位置:东京,点击创建工具链
  • 在工具链模版中选择:构建自己的工具链
  • 输入工具链名称
  • 为新建的工具链添加工具:Github和Delivery Pipeline两个工具, 上面图片,点击添加工具
  • 添加Github, 在搜索框中检索Github,如果你有IBM Github的账户,你会发现下面两个工具,否则只有第一个。
  • 如果你用的是公开的Github仓库或者其他企业Github仓库,请选择第一个

本教程选用IBM Github进行演示, 存储库类型:现有->输入存储库URL->点击创建集成

提示: 这里特别注意一下:如果你不是存储库的Owner,需要在创建之后,通知真正的Owner再次进入这个工具,修改Owner。否则后面Deliver阶段会报错

  • 创建Deliver Pipeline, 在搜索框输入deliver,点击Deliver Pipeline->输入管道名称,点击创建集成
  • 添加服务, 添加完集成工具后,你可以看到下面的画面,提示需要Continuous Delivery服务,我们点击提示文字中的“添加服务”进行添加。根据需要选择套餐,点击创建。

对Delivery Pipeline添加并配置阶段


点击上面的Delivery Pipeline,进入如下页面,点击添加阶段,这里我会添加两个阶段

阶段一:将源代码构建为Container Register的镜像

阶段二:CodeEngine拉取ContainerRegister的镜像构建容器

  • 阶段一 构建镜像, 输入选项卡,配置如下
  • 作业选项卡,配置如下:添加作业为构建类型->构建器类型:Container Register->输入API key->Container Register名称空间->Docker镜像名称。构建脚本部分不需要修改,保存即可。
  • 阶段二 构建容器
  • 上面第三步 构建脚本如下,供参考
#!/bin/bash	
# 此处为您的脚本	
# 安装 code-engine CLI	
# ibmcloud plugin install code-engine	
# 用API的方式 login IBM Cloud -r:地域 -g:资源组	
ibmcloud login --apikey ${IBM_CLOUD_API_KEY} -r ${IBM_CLOUD_REGION} -g ${IBM_CLOUD_RESOURCE}	
ibmcloud cr login	
# 选择Code engine的Project	
# 指定Code engine project的名字	
ibmcloud ce project select -n ${CODE_ENGINE_PROJ}	
# 发布 Code engine的程序	
echo "CODE_ENGINE_PROJ=${CODE_ENGINE_PROJ}"	
echo "PIPELINE_IMAGE_URL=${PIPELINE_IMAGE_URL}"	
APP_EXISTED=0	
eval $(ibmcloud ce application list | awk '$1=="'"${APP_NAME}"'" {printf("APP_EXISTED=1")}')	
if [ ${APP_EXISTED} -eq 1 ];	
then 	
ibmcloud ce application update --name ${APP_NAME} --image private.${PIPELINE_IMAGE_URL} --registry-secret ${REGISTRY_SECRET}	
else	
ibmcloud ce application create --name ${APP_NAME} --image private.${PIPELINE_IMAGE_URL} --registry-secret ${REGISTRY_SECRET}	
fi	

说明: 脚本涉及到的环境变量大部分在图4里定义的, 只有PIPELINE_IMAGE_URL比较特殊,它来自上一阶段

注意:PIPELINE_IMAGE_URL需要在管道级别定义环境属性

REGISTRY_SECRET:需要去CodeEngine 定义注册表访问权,这里填注册表访问权的名称。

可以选CodeEngine受管私钥,生成这个Key。

最后点击保存,你会看到下面的画面。点击第一个阶段的运行按钮,第一阶段运行成功后会自动运行后面的阶段。

最后,所有阶段都通过后,你可以到CodeEngine项目下去查看发布的应用程序,可以看到运行状态,URL,还可以测试。

工具链可以添加第三方工具,比如slack,在构建成功或失败后向slack channel发送通知(参看链接https://api.slack.com/messaging/webhooks)

补充:


  • deploy阶段的脚本
#!/bin/bash
# 此处为您的脚本
# 用API的方式 login IBM Cloud -r:地域 -g:资源组
ibmcloud login --apikey ${IBM_CLOUD_API_KEY} -r ${IBM_CLOUD_REGION} -g ${IBM_CLOUD_RESOURCE}
ibmcloud cr login
# 选择Code engine的Project
# 指定Code engine project的名字
ibmcloud ce project select -n ${CODE_ENGINE_PROJ}
# 发布 Code engine的程序
echo "CODE_ENGINE_PROJ=${CODE_ENGINE_PROJ}"
echo "PIPELINE_IMAGE_URL=${PIPELINE_IMAGE_URL}"
APP_EXISTED=0
eval $(ibmcloud ce application list | awk '$1=="'"${APP_NAME}"'" {printf("APP_EXISTED=1")}')
if [ ${APP_EXISTED} -eq 1 ];
then 
ibmcloud ce application update --name ${APP_NAME} --image private.${PIPELINE_IMAGE_URL} --registry-secret ${REGISTRY_SECRET}
else
ibmcloud ce application create --name ${APP_NAME} --image private.${PIPELINE_IMAGE_URL} --registry-secret ${REGISTRY_SECRET}
fi
  • deploy stage 截图

可以在终端上用命令查看CodeEngin状态

ibmcloud login -sso
ibmcloud target -g ResourceGroup
ibmcloud ce project select -n 'Code Engine Project'
ibmcloud ce application logs --application pplication-80