LoginSignup
1
0

More than 3 years have passed since last update.

Dockerでtabcmd実行環境を作る方法

Last updated at Posted at 2019-07-14

Tableau Serverをコマンドラインから操作できるtabcmdですが、Javaのバージョンが8以下でないとエラーが起るようです。(実際、Java12がインストールされた環境でtabcmdを実行するとエラーが起こります)
https://community.tableau.com/docs/DOC-22179

そこで、Openjdk8をベースイメージにして、Dockerでtabcmdを実行できる環境を構築します。

今回はDockerコンテナを起動し、docker execでTableau Serverへのログイン、Publish、ログアウトをやってみます。

環境

  • mac Mojave 10.14.5
  • Tableau Desktop 2019.2.1
  • Tableau Server 2019.2.1
  • tabcmd-2019-2-1

ディレクトリ構成

以下のディレクトリ構成にします。

tabcmd/
 ├ docker-compose.yml
 ├ Dockerfile
 ├ sh
   └ publish.sh
 └ start.sh

作成ファイル

Dockerfile

Openjdk8をベースイメージに、Dockerイメージを作成します。
curltabcmdを取得し、展開します。

FROM openjdk:8

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update
RUN apt-get install -y sudo curl gdebi
# download tabcmd
RUN curl -L -O https://downloads.tableau.com/esdalt/2019.2.1/tableau-tabcmd-2019-2-1_all.deb
# extract deb
RUN gdebi -n tableau-tabcmd-2019-2-1_all.deb

docker-compose.yml

ローカルのsh/publish.shをDockerコンテナ上にマウントします。

docker-compose.yml
version: '3'

services:
  tabcmd:
    build: ./
    tty: true
    container_name: tabcmd
    image: tabcmd
    volumes:
    - ./sh:/var

sh/publish.sh

docker-compose.ymlで記載されている通り、Dockerコンテナ上にマウントされます。
引数を受け取り、Tableau Serverにログイン、Publish、ログアウトを実施します。

publish.sh
#!/bin/bash
# set env path of tabcmd
source /etc/profile.d/tabcmd.sh

# login
echo "starting login."
tabcmd --accepteula login -s $1 --username $2 --no-certcheck --password $3
echo "completed login."

# Publish
echo "starting publish."
tabcmd publish $4 -o $5 -r $6 --db-username $7 --db-password $8 --save-db-password --save-oauth --no-certcheck
echo "completed publish."

# logout
echo "starting log out."
tabcmd --accepteula logout -s $1 --no-certcheck
echo "completed log out."

start.sh

パラメータを設定し、ローカルで実行します。
ローカルのPublish対象のtwbファイルをDockerコンテナ上にコピーし、docker execによってDockerコンテナ上でスクリプトを実行します。

start.sh
#!/bin/bash

# set param
TABLEAU_SERVER_URL=
TABLEAU_SERVER_LOGIN_ID=
TABLEAU_SERVER_LOGIN_PASS=
# tableau twb in local
TWB_PATH_LOCAL=
# in docker (ex. var/test.twb)
TWB_PATH_DOCKER=
OVERWRITE_WB_NAME=
PJ_NAME=
DB_USERNAME=
DB_PASSWPRD=

# copy from local to docker
docker cp $TWB_PATH_LOCAL tabcmd:$TWB_PATH_DOCKER
# exec publish on docker
docker exec tabcmd bash -c "source var/publish.sh $TABLEAU_SERVER_URL $TABLEAU_SERVER_LOGIN_ID $TABLEAU_SERVER_LOGIN_PASS $TWB_PATH_DOCKER $OVERWRITE_WB_NAME $PJ_NAME $DB_USERNAME $DB_PASSWPRD"

環境構築

上記のファイルを作成後、ローカルでdocker-compose.ymlと同一ディレクトリで以下を実行します。

docker-compose up -d

実行完了後、以下を実行してコンテナが起動していることを確認します。

 docker ps

結果:

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
823a47830565        tabcmd              "bash"              About an hour ago   Up About an hour                        tabcmd

スクリプト実行

ローカルでstart.shと同一ディレクトリで以下を実行します。

sh start.sh

これでPublish完了です。

まとめ

Dockerを使うと環境間の差異が原因での実行エラーを防げます。
学習コストは高いですが、作業の標準化にはうってつけだと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0