Conan在OpenShift中加速您的C/ c++应用程序

柯南加速你的C/ c++应用程序在OpenShift

C/ c++应用程序和构建系统脚本本质上是单体的。实现二进制兼容性变得极其困难,因为应用程序包含来自各种本地和第三方源的源代码信息,目标是各种平台。即使是典型的单片应用程序也可能包含复杂的依赖关系图,包括静态或动态链接的传递依赖关系。另一个增加复杂性的因素是不同技术类型的部署框架正在转向使用Docker容器和采用Kubernetes或Kubernetes变体。

在这篇博文中,我们将着重于通过使用柯南使用模块化的依赖来构建你的应用。然后,我们将继续使用OpenShift S2I来Dockerize您的c++应用程序。此外,为了简化部署,我们还添加了JFrog Artifactory

为了熟悉这个过程,我们创建了一个示例,展示了使用Conan构建、容器化和运行c++应用程序的过程。构造和容器化托管在Github上的c++应用程序cpp- - - - - -柯南建造者:0.1建造者的形象。

#运行sti (s2i)命令将c++项目容器化(在github上)S2i build https://github.com/memsharded/example-poco-timercpp-conan-builder: 0.1计时应用:0.1

接下来,我们可以运行容器化的c++应用程序,计时应用:0.1这是我们从上面的命令中得到的Docker镜像,包括输出二进制文件和负责运行应用程序的脚本。

#运行容器化版本的c++项目码头工人运行-计时应用:0.1

运行容器化c++项目

让我们从创建构建器映像开始。

步骤1:为柯南创建一个建造者形象

此示例项目的源代码可在Github

  • 克隆的柯南构建器映像,并生成构建器映像。
    建造者的形象包括柯南,gcc 7。x,使and other tools required for building C++ projects.
# clone repoGit克隆urlhttps/ / github.com/JFrog/project-examples.git&& CD project-examples/openshift-s2i-examples/cpp-conan#生成包含Conan、gcc的构建器映像。x,使码头工人建造-t cpp-柯南-构建器0.1

下面的Docker文件对应于构建器映像。

FROM centos/devtoolset-7-toolchain-centos7维护者John Smith  USER 0运行INSTALL_PKGS= . exe“git make cmake pel-release”\ yum install -y——setopt=tsflags=nodocs install $INSTALL_PKGS && \ rpm -V $INSTALL_PKGS && \ yum clean all运行yum install -y python-pip && pip install conan ENV GIT_COMMITTER_EMAIL=johns@delta.com ENV GIT_COMMITTER_NAME=JohnS COPY ./。s2i/bin/ /usr/local/s2i LABEL io.openshift.s2i.scripts-url="图片:/ / / usr /地方/ s2i"执行mkdir -p /opt/app-root && chown -R 1001:0 /opt/app-root ENV HOME= ./ opt /app-root ENV RT_CONAN_URL= ENV RT_ACCESS_TOKEN= ENV RT_USER= USER1001Workdir ${home} CMD [“回声”“S2I Builder映像通过Conan构建c++应用程序”]

构建器映像包负责构建和运行应用程序的S2I脚本。

步骤2:使用S2I脚本创建可复制的映像

S2I允许您使用c++源代码作为输入,轻松创建可复制的Docker映像,并生成运行应用程序的新映像作为输出。它包括以下两个主要脚本:

  • 组装脚本:构建c++项目并生成二进制文件。我们使用Conan来避免重新构建c++依赖关系,包括传递依赖关系。
  • 运行脚本:运行应用程序。

我们的样例c++项目依赖于Poco库。Poco依赖于OpenSSL, OpenSSL依赖于zlib。

使用Conan,默认情况下,依赖项会自动从Conan -center下载,从而无需构建Poco, OpenSSL和zlib。

想了解更多关于柯南和相关项目的信息,请点击在这里

2 a。运行组装脚本

cp-射频/tmp/src/./选择/应用程序-/如果-z“RT_CONAN_URL美元”]然后回声“使用默认的柯南存储库$RT_CONAN_URL”其他的回声“即将添加远程柯南存储库”柯南远程添加柯南-当地的RT_CONAN_URL美元fi如果[[-n“RT_ACCESS_TOKEN美元”& &-n“RT_USER美元”]]然后回声“即将设置conan-local $USERNAME $RT_ACCESS_TOKEN”柯南用户-p RT_ACCESS_TOKEN美元-r柯南-当地的RT_USER美元ficd/选择/应用程序-/回声“运行柯南安装构建丢失”柯南安装--构建缺失回声“运行cmake命令”cmake-G“Unix makefile”-DCMAKE_BUILD_TYPE释放cmake--构建#柯南上传*——all -r柯南本地——确认


2 b。运行构建器脚本

构建器脚本公开了配置Conan以从Artifactory下载包的参数。建议使用多步骤构建模式或者使用短命的访问令牌使用Artifactory进行身份验证,如下所示。

出口响应美元旋度-H“X-JFrog-Art-Api: RT_API_KEY美元”-XPOST" $ RT_URL / api /安全/令牌”-d“用户名= RT_USER美元”-d“= member-of-groups范围:读者”-d“expires_in = 600”出口RT_ACCESS_TOKEN美元回声“美元反应”|金桥-raccess_tokens2i build https://github.com/memsharded/example-poco-timer pcp -conan-builder:0.1 timer-app:0.1 -e "RT_CONAN_URL=$RT_URL/api/conan/conan-local" -e "RT_USER=$RT_USER" -e "RT_ACCESS_TOKEN=$RT_ACCESS_TOKEN"

运行在上一步中创建的c++容器化应用程序。

码头工人运行-这个计时器-应用程序0.1

当容器启动时,运行以下脚本:

#!/bin/bash回声《运行定时器c++应用》cd $HOME && ./bin/timer . cd

幕后窥视:运行c++容器化应用程序

方法触发以下五个步骤图片来源命令:

  1. 构建器映像的容器启动并包含编译c++项目所需的一组工具。
  2. 将执行该项目的Git克隆。
  3. 执行负责使用柯南构建项目的组装(构建脚本)。在此步骤中,依赖项的预编译包从Conan存储库(Artifactory, Conan -center)下载。
    完成后,将创建输出二进制文件。
  4. 一个新的Docker清单被创建,它有一个额外的Docker映像层,其中包括在步骤3中生成的输出二进制文件。该映像使用S2I命令中指定的名称进行标记。
  5. 运行脚本在容器化应用程序启动时执行。

使用Conan运行c++容器化应用程序

现在你已经开始运行了,跳过去了解更多柯南和Artifactory

相关文章:

柯南小抄